简单工厂模式与策略模式

刚刚接触设计模式时,感觉简单工厂与策略模式非常像。都有一个支持所有算法的接口,一个公共父类和若干个具体实现的类。那么它们之间的区别在什么地方呢?

一:从uml图来看

简单工厂:

策略模式:

从uml图上来看,主要区别体现在类D与类A的关系上。简单工厂中体现为依赖关系,策略模式中体现为聚合关系。

二算法接口

简单工厂:

public class D
{
   public A createD()
   {
     A c=null;
     switch()
      {
        case 
         c= new B()
        case 
         c=new C()
       }
    }
}

策略模式:

class D
{
    private A c
    public D(A c)
    {
      this.c=c
     }
}

分析:简单工厂的代码上来看,D与A表现为依赖关系,因此在D类中使用A的对象作为方法的参数。随后在D中进行逻辑判断。将复杂的逻辑判断封装在类中,简化了客户端的代码既是简单工厂模式的优点也是它的缺点。每当增加一个新的算法,D类都必须重新写,这样就违反了开放—封闭原则。从策略模式的代码来看,D与A的关系是聚合。因此,在D类中既使用了A的对象作为属性,又在构造函数中实现了对于属性的赋值。但是在D类中并没有逻辑判断的语句,这样就把压力施加到了客户端上。

三客户端代码

简单工厂模式

A c;
c=D.createD();

策略模式

D c=null;
switch()
{
 case 
  c=D(B)
 case
  c=D(C)
}


分析:区别有三。1策略模式中有逻辑判断,而简单工厂模式没有。2在简单工厂模式中牵涉到了两个类,在策略模式中只有一个类。不管增加多少功能,客户端始终只和C类保持联系,因此策略模式封装了变化3简单工厂模式使用了D类的方法,而策略模式使用了D类的构造函数。

 





 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值