欢迎来到天天文库
浏览记录
ID:56185324
大小:1.12 MB
页数:25页
时间:2020-03-18
《【精品】设计模式综述.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式综述第一:创建型模式(全是对象创建型模式)。1.1抽象工厂相关零件组合成产品AbstractFactory模式是用来解决这类问题的:要创建一组相关或者相互依赖的对象。UML图如下,AbstractFactory模式关键就是将这一组对象的创建封装到一•个用于创建对象的类(ConcreteFactory)屮,维扩弦样一个创建类总比维护n多相关对象的创建过程要简单的多。AbstractFactory模式和Factory模式的区别:AbstractFactory模式是为创建一纟11.(冇多类)相关或依赖的对彖提供创建接口,而Fa
2、ctory模式是为一类对彖提供创建接口或延迟对象的创建到了类屮实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ProductFactory1),当然也可以用原型实现。一个具体的丁•丿通常是一个单件。意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。客户仅适用AbstractFactory和AbstractProduct类声明的接口。1.2生成器——组合复杂的对象实例。Builder模式要解决的是这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合
3、而成),我们要将复杂对象的创建过程和这个对象的表示(展示)分离开來,这样做的好处就是通过一步步的进行复杂对彖的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最示得到的对彖的展示不一样。UML图如下所示:BuilderPatternConcrcteBuilderBuildPartAf)~RiiildPanR()-BuildPanCO(JctProducU)Builder模式的关键是其屮的Director对象并不肓接返冋对彖,而是通过一步步(BuildPartA,BuildPartB,BuildPartC)来一步
4、步进行对象的创建。当然这里Director可以提供一个默认的返I川对象的接口(即返冋通用的复杂对象的创建,即不指定或者特定唯一指定BuildPart屮的参数)。意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(可以通过传入不同的参数实现这一点)。Builder模式和AbstractFactory模式在功能上很相似,因为都是用来创建人的复杂的对象,它们的区别是:Builder模式强调的是一步步创建对象,并通过相同的创建过稈可以获得不同的结果对彖,一般來说Builder模式中对彖是在最麻一步返冋的。而在
5、AbstractFactory模式屮对象是直接返冋的,AbstractFactory模式强调的是为创建多个相互依赖的对彖提供一个同一的接口(着重于多个系列的产品对象(简单的和复杂的))。相关模式:组成模式通常是用Builder模式生成的。1.3工厂方法(简单工厂)建立对象实例交给子类(万事交给子类)。Factory模式的两个最重要的功能:1)定义创建对彖的接口,封装了对彖的创建(工厂方法);2)使得具体化类的丁作延迟到了了类屮。上血两种情况的UML图分别如图1和图2,图2中Factory模式的应用并不是只是为了封装对象的创建,而
6、是要把对象的创建放到了类屮实现:Factory屮只是提供了对象创建的接口,只实现将放在Factory的了类ConcreteFactory屮迹行。这是图2和图1的区别所在。丁•厂方法的一个潜在的缺点在丁•客户可能仅仅为了创建一个特定的ConcreteProduct对彖,就不得不创建Factory的了类。FactoryPattern7丿图1图2Factory模式也带来至少以下两个问题:1)女U果为每一个具体的ConcreteProduct类的实例化提供一个函数体,那么我们可能不得不在系统屮添加了一个方法來处理这个新建的Concret
7、eProduct,这样Factory的接口永远就不能封闭(Close)。当然我们可以通过创建一个Factory的了类来通过多态实现这一点,但是这也是以新建一个类作为代价的。2)在实现屮我们可以通过参数化丁厂方法,即给FactoryMethod()传递一个参数用以决定是创建具体哪一个具体的Producto当然也可以通过模板化避免1)中的了类创建了类,其方法就是将具体Product类作为模板参数。可以看出,Factory模式对于对彖的创建给予开发人员提供了很好的实现策略,但是Factory模式仅仅局限于一类类(就是说Product是
8、一类,有一个共同的基类),如果我们要为不同类的类提供一个对象创建的接口,那就要用AbstractFactory/。意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其了类。相关模式:(1)T厂方法通常在模
此文档下载收益归作者所有