工厂方法模式

简单工厂模式

设置专门的一个类来负责实例化其他的实例,这就是工厂。使用简单工厂模式,客户端只需要与工厂(factory类)与抽象类接触,降低了耦合度。简单工厂模式可以分为三部分:抽象类,具体实现类与factory。其中抽象类是factory的一个成员变量,factory根据一定的条件实例化其子类。
简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。对于客户端来说,去除了与具体产品的依赖,但这也导致简单工厂模式违反了开放-封闭原则。

对于一个简单的四则运算的程序,使用简单工厂模式的UML类图如下

工厂方法模式

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

使用工厂方法模式来实现四则运算的UML类图

使用工厂方法模式,在增加一个新的计算方法时,需要增加一个性的运算类的子类与工厂类的子类,而不需要去修改工厂类原本的代码,这符合开放-封闭原则,是值得提倡的。但这也导致了将简单工厂的内部逻辑判断转移到了客户端来进行,本来应该修改工厂类,现在变成修改客户端的代码。

在实际开发时,如果我们需要在客户端使用工厂实例化多个对象,使用简单工厂模式时,代码为

Product product_1 = new Creator("条件");
Product product_2 = new Creator("条件");
Product product_3 = new Creator("条件");

使用工厂方法模式实例化多个对象的代码为

Creator creator = new ConcreateCreator();
Product ConcreateProduct_1 = creator.FactoryMethod();
Product ConcreateProduct_2 = creator.FactoryMethod();
Product ConcreateProduct_3 = creator.FactoryMethod();

当需求改变要求我们修改代码时,使用工厂模式只需要修改实例化的工厂类就可以,而简单工厂模式内部有3条重复的语句,需要我们修改3处。

简单工厂模式与工厂方法模式都集中封装了对象的创建过程,但工厂方法模式降低了客户程序与产品对象的耦合,这也导致每增加一个产品,就需要增加一个生产工厂的类,增加了额外的开发量。

还有一种更好的方法是采用反射机制。

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值