创建型设计模式-六月的雨-iteye技术网站

创建型设计模式-六月的雨-iteye技术网站
2011年09月01日
  抽象工厂(Abstract Factory):提供一个创建一系列或相互依赖对象的接口,而无需指定它们的具体的类
  适用性
  1:一个系统要独立于它的产品的创建、组合和表示时;
  2:一个系统要由多个产品系列中的一个来配置时;
  3:当你要强调一系列相关的产品对象的设计以便进行联合使用时;
  4:当你提供一个产品类库,而只是想显示它们的接口而不是实现时。
  参与者
  1:Abstract Factory;声明一个创建抽象产品对象的操作接口
  2:Concrete Factory;实现创建具体产品对象的操作
  3:Abstract Product;为一类产品对象声明一个接口
  4:Concrete Product;定义一个将被相应的具体工厂创建的产品对象;实现AbstractProduct接口
  5:Client;仅仅使用由Abstract Factory 和 Abstract Product 类声明的接口。
  生成器(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示
  适用性
  1:当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时
  2:当构造过程必须允许被构造的对象有不同的表示时
  参与者
  1:Builder
  为创建一个Product对象的各个部件指定抽象接口
  2:Concrete Builder
  实现Builder的接口以构造和装配该产品的各个部件;定义并明确它所创建的表示;提供一个检索产品的接口
  3:Director
  构造一个使用B u i l d e r接口的对象
  4:Product
  表示被构造的复杂对象。C o n c r e t e B u i l d e r创建该产品的内部表示并定义它的装配过程;包含定义组成部件的类,包括将这些部件装配成最终产品的接口
  注:Builder与Abstract Factory相似,主要的区别是Builder模式着重一步步构造一个复杂对象;而Abstract Factory 着重于多个系列的产品对象。Builder 在最后一步返回产品,而abstract factory 产品是立即返回的
  工厂方法(Factory Method)
  定义一个用于创建对象的接口,让子类决定实例化哪一个类。该模式使一个类的实例化延迟到其子类。
  1:当一个类不知道它所必须创建的对象的类的时候;
  2:当一个类希望由它的子类来指定它所创建的对象的时候;
  3:当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
  参与者
  1:Product
  定义工厂方法所创建的对象的接口
  2:Concrete Product
  实现Product接口
  3:Creator
  声明工厂方法,该方法返回一个Product类型的对象,Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的Concrete Product对象;可以调用工厂方法以创建一个Product对象。
  4:Concrete Creator
  重定义工厂方法以返回一个ConcreteProduct实例
  原型(Prototype) 用原型实例指定对象的种类,并且通过拷贝这些原型创建新的对象。
  适用性
  1:当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype;
  2:当要实例化的类是在运行时刻指定时,例如,通过动态装载;
  3:为了避免创建一个与产品类层次平行的工厂类层次时;
  4:当一个类的实例只能有几个不同状态组合中的一种时
  参与者
  Prototype
  声明一个克隆自身的接口
  Concrete Prototype
  实现一个克隆自身的操作
  Client
  让一个原型克隆自身从而创建一个新的对象
  单态(Singleton)
  保证一个类仅有一个实例,并且提供一个访问它的全局访问点。
  适用性
  1:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时;
  2:当这个唯一实例应该是通过子类化可扩展的,且客户该无需更改代码就能使用一个扩展的实例时。
  Step1:
  “工厂”模式,它把我们需要的对象(例如汽车)的创建过程隐藏了,也正是这种隐藏,为我们以后复用代码提供了充分条件,因为我们在使用对象时,可以通过抽象类来撰写代码,这样我们以后不想使用该种对象(如红汽车),想改为其他对象(如蓝汽车),那只是在工厂的实现类上做稍微调整即可(原来返回红汽车的改为蓝汽车)。
  Step2:
  当我们在使用对象时,该类对象包含多种特殊的种类(我理解为子类),那么我们就要考虑使用工厂对象了,“抽象工厂”与“工厂”两种模式的主要区别不在“产品”这一段,而是在“工厂”,也就是说“抽象工厂”强调的是不仅在“产品”这一层要应用抽象,而且在“工厂”层要针对“一系列相关的产品”进行抽象。
  
  
  
  
  
  
  
  
  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值