-
注: 1)Factory和ProductA,ProductB形成一个层次。
2)FactoryA和FactoryB继承Factory,并负责实例化ProductA和ProductB的子类。
优点:
i. 可以通过更换Concrete Factory而实现对整个Product的替换。
使用环境:
i. 一个系统要独立于她的产品的创建,组合和表示。(例如,Java中的UI,Client的LookAndFeel可以独立于控件的创建和表示。)
ii. 一个系统要由多个产品系列中的一个来配置。(一个系统可以由Product A1和Product B1或者Product A2和Product B2来配置)
iii. 当你要强调一个系列相关的产品对象的设计以便进行联合使用时。
iv. 当你提供一个产品类库,而只想显示他们的接口而不是实现时(Client通过Factory只看到了Product A和Product B的接口)
小结:
与Factory类似,但返回的是一组类而不仅是一个类,从某种程度上说是Factory模式在更高层次上的抽象。
AbstractFactory将产品对象的创建延迟到他的实现类当中(FactoryA和FactoryB)
AbstractFactory模式帮助你控制一个应用创建的对象的类。因为一个工厂封装创建产品对象的责任和过程。她将客户与类的实现分离。客户通过他们的抽象接口操纵实例。类名也在具体工厂的实现中被分离,他们并不出现在客户代码中。
难以生产新种类的产品,因为AbstractFactory接口限制了可以被创建的产品集合,支持新种类的产品需要扩展工厂接口。
Swing中的UI部分,是Abstract Factory的一个应用。
-
Singleton模式
全局只有一个Singleton实例。
优点:1、可对唯一的实例进行受控访问。
2、缩小名空间。(是对全局变量的一种替代,避免了那些存储唯一实例的全局变量污染名空间)
3、允许可变数目的实例。(在Singleton类内可进行实例计数)
使用环境:
i. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问她时。
ii. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。(只要修改Singleton中的方法即可)
优点:不用担心当需要多个实例时会抛出异常,可以很容易支持共享实例和实例化多个实例。
缺点:不能子类化。(因为构造函数是私有的)
小结:
i. 保证整个系统有且只有一个实例,并且在系统的各个部分都能对该实例进行访问。
ii. Java当中的Math类是一个Singleton的应用。
设计模式——Abstract Factory模式、Singleton模式
最新推荐文章于 2024-04-09 01:19:52 发布
1、Abstract Factory模式