文档章节

模板模式与抽象工厂模式的代码抽取

jiao1990
 jiao1990
发布于 2016/11/24 11:25
字数 488
阅读 1
收藏 0

1.public interface IClassService {
    public void  doBussness(ProductListVo productListVo);
    public  void doSirstBussness(ProductListVo productListVo);
    public  void doFirstBussness(ProductListVo productListVo);
}

2.父类

public abstract class SecondClassService implements IClassService{
    //公共代码实现
    public void  doBussness(ProductListVo productListVo){
        doFirstBussness(productListVo);
        doSirstBussness(productListVo);
    }

   //不同业务需求的特俗逻辑
    public abstract void doSirstBussness(ProductListVo productListVo);
    public abstract void doFirstBussness(ProductListVo productListVo); 

}

3.子类1实现

@Service
public class ResClassService extends SecondClassService {

    @Override
    public void doSirstBussness(ProductListVo productListVo) {
    }
    @Override
    public void doFirstBussness(ProductListVo productListVo) {
        System.out.println(productListVo.getClassBrandParentName()+"ResClassService");

    }

}

 4.子类2实现

@Service
public class StockClassService extends SecondClassService{

    @Override
    public void doSirstBussness(ProductListVo productListVo) {
        
        System.out.println(productListVo.getBrandName()+"StockClassService");
    }

    @Override
    public void doFirstBussness(ProductListVo productListVo) {
        System.out.println(productListVo.getClassBrandParentName()+"StockClassService");
    }

}

5.模板模式与抽象工厂模式结合

@Service
public class demo implements ApplicationListener<ApplicationEvent> {
    private volatile boolean isInstial =true;
    private static Map<Integer, SecondClassService> serviceMap = new HashMap<Integer, SecondClassService>(
            2);
    @Resource
    private ResClassService resClassService;
    @Resource
    private StockClassService stockClassService;
    

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextRefreshedEvent) {
            if (isInstial) {
                // 是否初始化标志
                isInstial = false;
                // 优惠券使用个数限制 接口登记
                serviceMap.put(StaticProperty.PRO_TOP_TYPE_MENPIAO, resClassService);
                serviceMap.put(StaticProperty.PRO_TOP_DIY, stockClassService);

            }
        }
        
    }
    
    public  SecondClassService register(Integer id){
        return serviceMap.get(id);
    }
   
}

6.业务逻辑 (此处可以继续抽取,一个公用的方法//工厂模式的出口)

 @Resource
    public  demo demo2;
    /**
     * 
     * @param request 请求
     * @param response 响应
     */
    @RequestMapping(value = "/A", method = {RequestMethod.POST, RequestMethod.GET})
    public void A(HttpServletRequest request,HttpServletResponse response)
    {
        ProductListVo productListVo = new ProductListVo();
        productListVo.setBrandName("111");
        productListVo.setClassBrandParentName("2222");
        IClassService register = demo2.register(1);
        register.doBussness(productListVo);

        IClassService register2 = demo2.register(2);
        register2.doBussness(productListVo); 
    }
5. 模式总结(此处转载)

  5.1 优点

    5.1.1 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。

    5.1.2 子类实现算法的某些细节,有助于算法的扩展。

    5.1.3 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

  5.2 缺点

    5.2.1 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

  5.3 适用场景

    5.1 在某些类的算法中,用了相同的方法,造成代码的重复。

    5.2 控制子类扩展,子类必须遵守算法规则。

 

© 著作权归作者所有

共有 人打赏支持
jiao1990
粉丝 0
博文 6
码字总数 831
作品 0
芜湖
【聚能聊话题】聊聊设计模式,封装算法——模板方法模式

前面我们聊了: 什么是设计模式?你知道多少? 你必须知道的六大设计原则 第一个设计模式,我是皇帝我独苗,单例模式 第二个设计模式,工厂方法模式 第三个设计模式,抽象工厂模式 这个真的很...

微wx笑
05/29
0
0
设计模式Java Design Pattern-工厂方法模式FactoryMethod

我的博客 一、 设计模式的分类 大体可以分为三类: 创建型模式(5个) 单例模式、原型模式、工厂方法模式、抽象工厂模式、建造者模式 结构性模式(7个) 适配器模式、装饰器模式、代理模式、...

勇敢写信
03/22
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
你需要了解的23种JavaScript设计模式

为什么要学习设计模式? 在许多访谈中,你可能会遇到很多面向对象编程中的接口,抽象类,代理和以及其他与设计模式相关的问题。 一旦了解了设计模式,它会让你轻松应对任何访谈,并可以在你的...

java高级架构牛人
06/02
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向对象设计原则(OOP)

单一职责原则(Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。 核心原则:低耦合,高内聚。 一个类,应该只有一个引起它变化的原因,也就是...

gackey
27分钟前
2
0
C++ 锁

C++提供了两种常用的锁,std::lock_guard<Lockable &T>和std::unique_lock<Lockable &T>。通常使用场景下,这两个锁用法一致。即,在构造锁对象时上锁,在析构锁对象时解锁。使用户从上锁/解...

yepanl
30分钟前
2
0
Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
今天
2
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
今天
2
0
TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部