设计模式之工厂方法模式

工厂方法模式------ Factory Method

定义

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类

角色
  • 接口工厂类
  • 具体工厂类
  • 抽象产品类
  • 具体产品类
UML类图
工厂方法模式UML类图
代码
  • Operation.java
public abstract class Operation {
    private Long numberA;
    private Long numberB;
    public abstract long getResult();
    public Long getNumberA() {
        return numberA;
    }
    public void setNumberA(Long numberA) {
        this.numberA = numberA;
    }
    public Long getNumberB() {
        return numberB;
    }
    public void setNumberB(Long numberB) {
        this.numberB = numberB;
    }
}
  • AddOperation.java
public class AddOperation extends Operation {
    @Override
    public long getResult() {
        return getNumberA() + getNumberB();
    }
}

其他三个Operation类似

  • IFactoryMethod.java
public interface IFactoryMethod {
    Operation createOperation();
}
  • AddOperationFactory.java
public class AddOperationFactory implements IFactoryMethod {
    @Override
    public Operation createOperation() {
        return new AddOperation();
    }
}

其他三个工厂类似

  • ClientTest.java
public class ClientTest {
    public static void main(String[] args) {
        IFactoryMethod factoryMethod = new AddOperationFactory();
        Operation operation = factoryMethod.createOperation();
        operation.setNumberA(99L);
        operation.setNumberB(1L);
        System.out.println(operation.getResult());
    }
}
与简单工厂模式相比

简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖,但当需要在增加一个产品的时候,就需要去工厂类中加上一个相应的逻辑判断(利用反射实现的不需要)去生产一个产品,这说明简单工厂不但对拓展开放了,对修改也开放了。违背了开放-封闭原则!

优点
  • 1.隐藏了具体的创建产品的细节,客户端只需关心创建产品的工厂,甚至不需要知道具体产品的类名
  • 2.当想新增产品时,无需修改抽象工厂,也无需修改其他具体工厂和具体产品,只需增加一个对应的具体工厂和具体产品即可,提高了系统的可拓展性,符合"开闭原则"
缺点

添加新产品时,需要新增产品工厂与具体产品类,增加了系统的复杂性,

适用场景

一个类不知道他需要的对象的类名,只需要知道对应的工厂即可。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 工厂模式 首先需要先说一下工厂模式,工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、工厂方法...
    Airing阅读 5,090评论 0 7
  • 上一篇介绍简单工厂模式 的时候提到它对开闭原则 支持的不够,因为如果有新的产品加入到系统中去,就需要修改工厂类,就...
    Michaelhbjian阅读 3,382评论 0 0
  • 工厂方法模式(Factory Method) 工厂方法模式(Factory Method)是一种创建型的设计模式,...
    Code4Android阅读 3,321评论 0 2
  • 好久没有写这个系列了,最近看 WWDC 视频,发现有几个代码片段挺适合拿来当面试题,所以分享给大家。 题目是:以下...
    凯旋之歌阅读 1,769评论 0 0
  • 【大多数人的看法,基本上都是被灌输的。】看到这一句的时候,有浑身一颤,我不知道脑海中有多少观念,是被灌输的。这些观...
    璇_律阅读 1,630评论 0 0

友情链接更多精彩内容