分类: 项目管理
2009-12-06 16:43:38
1. 抽象工厂模式
抽象工厂主要提供了一种封装一系列产品族的方法,抽象工厂并不是真实的产品生产者,真实的产品由继承自抽象工厂的具体工厂生产,抽象工厂向客户端提供调用接口,通过该接口获取具体的工厂,通过该具体工厂获得相应的一族产品。只要工厂生产产品的接口保持一致,可以支持新添加的具体工厂和相应的产品,而客户端的代码无需改变。
客户端的代码无需改变。如图1所示,具体工厂是抽象工厂的子类,客户端通过抽象工厂根据需要获得相应的具体工厂,生产产品的接口由抽象工厂定义,保持一致性。具体工厂生产其对应的一族产品,客户端通过获得的具体共产生产出需要的具体产品。
图1 抽象工厂模式
Example:
我们有这样的需求,我们需要创建一个控件库并且该控件库支持多个操作系统平台,要求变更操作系统客户端代码不应该改变。其程序的类图如图2所示。
图2 抽象工厂模式实例
客户使用GetFactory获得相应操作系统的工厂并且调用一致的Show方法。这样依赖具体的平台我们改变工厂但是客户的实现保持不变。如果添加新的操作系统平台我们只需要新的工厂和其对应的控件的具体实现而无需修改已有的代码即可支持该新的平台。
为了节省篇幅,这里不列举代码,详细的代码见具体的工程,此后的实例也不列举代码,都通过工程进行阅读,代码通俗易懂,运行该抽象工厂的工程,由于是在Win平台下,所以得到的控件就是WinButton和WinLabel。
2. 建造者模式
建造者模式应用在指挥者要求建造者按照几个步骤创建产品时。按照需求,建造者建造产品的每个部分,如图3所示。
图3 建造者模式
Example
假设在一个披萨店,服务员为顾客服务,然后使用PizzaBuilder创造Pizza,这里服务员是指挥者,PizzaBuilder是建造者,CheesePizzaBuilder和MixedPizzaBuilder是具体的建造者,Pizza是产品。程序实现的类图如图4所示。
图4 建造者模式实例
3. 工厂模式
客户使用工厂生产产品,但是工厂决定何时去实例化真实的产品。这样的话降低了与客户端的耦合度,客户无需处理何时实例化,并且在工厂内部还可以进行一些关键的操作,这些对于客户来说都是透明的,其示意图如图5所示。
图5 工厂模式
Example:
登陆的场景,在登录过程中我们创建了登陆者工厂的实例,进行登录,但是直到真实的登录过程完成才进行登陆者的实例化。
4. 原型模式
当我们有太多的类需要去实例化,但是完全的创建一个新的实例开销过大,所以我们不去直接创建对象而只是复制已有的对象或者修改已有对象的某些状态从而使用它,该已有的对象我们就可以称之为原型。其示意图如图6所示。
图6 原型模式
Example:
应用很简单就是,创建了一个新的实例之后,假设创建该实例的代价很大,那么以后我们需要创建新的实例的时候,就不直接创建一个该类的新的实例,而是复制并且适当修改该已经创建的实例的状态获得新的实例,这里在项目中使用MemberwiseClone方法,表示该实例的浅表副本。
5. 单件模式
当我们需要限制一个类的对象数量时候使用,确保只允许拥有一个实例,其本质就是该类拥有一个私有的构造器和静态方法,通过使用那个方法可以访问该类的实例。其示意图如图7所示。
|