设计模式——Factory模式



1 Factory模式

注: 1)Product AProduct B具有相同的父类,但是具有不同的实现。

 

     2)Creator可根据不同的输入变量决定所需实例化的类。

 

优点:将方法与处理分离,处理可以独立于方法名而存在。

 

使用环境:

i. 当一个类不能静态确定她所必须创建的对象的类的时候。(Client可以在运行时,通过Creator来获得所需的Product子类)

ii. 当一个类希望由她的子类来实现她所定义的行为的时候。(由Product AProduct B来定义Product的行为)

 iii. 当你希望将创建类的信息局部化的时候。(可以把if-else的选择代码,放到Creator内)

 

代码实例:

publicinterface Product {

      public void method();

}

         public class ProductA implementsProduct{

          public void method(){

               do some thing;

          }

          }

 

         public class ProductB implementsProduct{

          public void method(){

          do another thing;

          }

          }

 

 

 

 

 

publicclass Creator{

      public Product getProduct(){

          if(some condition){

               return new ProductA();

 }else{

returnnew ProductB();

}

}

}

  1. Abstract Factory模式

     注: 1)FactoryProductAProductB形成一个层次。

          2)FactoryAFactoryB继承Factory,并负责实例化ProductAProductB的子类。

    优点:

      i. 可以通过更换Concrete Factory而实现对整个Product的替换。

    使用环境:

      i. 一个系统要独立于她的产品的创建,组合和表示。(例如,Java中的UIClientLookAndFeel可以独立于控件的创建和表示。)

     ii. 一个系统要由多个产品系列中的一个来配置。(一个系统可以由Product A1Product B1或者Product A2Product B2来配置)

      iii. 当你要强调一个系列相关的产品对象的设计以便进行联合使用时。

      iv. 当你提供一个产品类库,而只想显示他们的接口而不是实现时(Client通过Factory只看到了Product AProduct B的接口)

     小结:

        Factory类似,但返回的是一组类而不仅是一个类,从某种程度上说是Factory模式在更高层次上的抽象。

        AbstractFactory将产品对象的创建延迟到他的实现类当中(FactoryAFactoryB

        AbstractFactory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程。她将客户与类的实现分离。客户通过他们的抽象接口操纵实例。类名也在具体工厂的实现中被分离,他们并不出现在客户代码中。

        难以生产新种类的产品,因为AbstractFactory接口限制了可以被创建的产品集合,支持新种类的产品需要扩展工厂接口。

        Swing中的UI部分,是Abstract Factory的一个应用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值