工厂模式

设计模式1–工厂模式

目的:实现了对责任的分割。通常由应用程序直接使用 new 创建新的对象,为了将对象的创建和使用相分离,采用工厂模
式,即应用程序将对象的创建及初始化职责交给工厂对象。

分类:简单工厂(Calendar)、工厂方法(logback)、抽象工厂(pool) 对应经典源码。

简单工厂:

在这里插入图片描述
以上类图,就可以看出来,其实简单工厂大家平常都会用到,说白了就像是个工具类,通过一个名称通过courseFactory获取对应课程。

   public ICourse create(String className){

        if(className != null && !className.equals("")){
            try {
                return (ICourse) Class.forName(className).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return null;
    }

缺点:1、工厂类的责任太重、不易于扩展复杂的产品结构。2、如果新增产品,需要修改现有工厂,违反了封闭开发原则。
优点:实现了对责任的分割。客户端负责消费、工厂负责生产。

工厂方法

在这里插入图片描述
以上类图,就可以看出来,其实工厂方法是对工厂进行了抽象,工厂里创建的方法返回的是抽象对象。具体怎么创建、创建出什么样对象是各自工厂实现,主要解决了产品扩展的问题,工厂方法让类的初始化推迟到了子类中进行。

public static void main(String[] args) {

        ICourseFactory factory = new PythonCourseFactory();
        ICourse course = factory.createVideo();
        course.record();

        factory = new JavaCourseFactory();
        course = factory.createVideo();
        course.record();

    }

缺点:1、类的数目较多,增加了复杂度。
优点:1、创建对象需要大量重复的代码。2、客户端不依赖产品类如何被创建、实现等细节。3、也满足了封闭开放原则,新增产品需要拓展新的工厂即可。

抽象工厂:

在这里插入图片描述
以上类图可以看出 工厂里是抽象的产品等级,提供一个接口,用于创建相关的对象家族。
什么是产品族、产品等级呢?
在这里插入图片描述
颜色从深到浅是海尔、美的、奥克斯等不同品牌。这一系列产品相关产品对象就是产品族,正方形:冰箱;园:洗衣机;菱形:彩电,这就是不同的产品等级。

当你的业务形态和上面这幅图一样复杂后,你或许应该考虑抽象工厂。抽象工厂模式 是指提供一个创建一系列相关或相互依赖对象的接口,无须制定他们具体的类,客户端不依赖产品类实例如何被创建、实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

缺点:1、产品等级扩展不友好违反了封闭开放原则,需要对各个抽象类、实现类完成修改。
优点:1、可以很好的对产品等级进行扩展。2、可以满足比较复杂的产品结构。

总结:使用设计模式切记不能有洁癖,生搬硬套,不能为了用而取用,应该跟随业务的具体形态,不断变化 从最简单的 简单工厂 逐步跟随业务脚本 演变成抽象工厂。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值