设计模式——Abstract Factory模式、Singleton模式


1、Abstract Factory模式
  1.  注: 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的一个应用。

  2. Singleton模式

       全局只有一个Singleton实例。

     优点:1、可对唯一的实例进行受控访问。

         2、缩小名空间。(是对全局变量的一种替代,避免了那些存储唯一实例的全局变量污染名空间)

         3、允许可变数目的实例。(在Singleton类内可进行实例计数)

     

     使用环境:

        i. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问她时。

    ii. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。(只要修改Singleton中的方法即可)

     优点:不用担心当需要多个实例时会抛出异常,可以很容易支持共享实例和实例化多个实例。

    缺点:不能子类化。(因为构造函数是私有的)

    小结:

     i. 保证整个系统有且只有一个实例,并且在系统的各个部分都能对该实例进行访问。

     ii. Java当中的Math类是一个Singleton的应用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值