设计模式速查手册1创建型.docx
- 文档编号:2845726
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:28
- 大小:136.18KB
设计模式速查手册1创建型.docx
《设计模式速查手册1创建型.docx》由会员分享,可在线阅读,更多相关《设计模式速查手册1创建型.docx(28页珍藏版)》请在冰点文库上搜索。
设计模式速查手册1创建型
设计模式速查手册-创建型
2010-12-2822:
46byEricZhang(T2噬菌体),1962visits,网摘,收藏,编辑
Is&IsNot
这篇文章是……
仅包含模式的名称、简要说明、结构类图和结构示例代码。
可用于快速浏览、回顾、查询及复习设计模式。
模式的意图和使用场合来自作者的个人实践总结。
虽然示例代码使用C#,但是尽量不会用到C#中特有的特性、接口及方法,而是起到一个通用框架说明的作用。
这篇文章不是……
对设计模式面面俱到。
对设计模式详细而深入的探讨和研究。
从其它文献中照搬的东西。
保证绝对没有错误(虽然我尽我所能让其准确)。
讲述设计模式在C#中具体实现方法。
01AbstractFactory(抽象工厂)
简要说明
抽象工厂模式拥有一组工厂类,这些工厂类实现同一个抽象工厂接口,这个接口定义了一系列创建方法,每一个方法创建一种产品,所有方法所创建的产品组成一个系列。
不同的具体工厂类创建不同系列的系列产品,系列中每一种产品实现同一个接口。
客户类依赖抽象工厂接口及各个产品接口,并通过实例化不同的具体工厂创建不同的产品系列。
抽象工厂适用于客户类拥有与产品系列无关的加工逻辑的场合,此时通过抽象工厂模式,将创建产品系列的逻辑与加工逻辑分离,那么同样的加工逻辑就可以作用于不同的产品系列,至于创建哪个系列的产品则由客户类拥有的具体的工厂决定。
结构类图
结构示例代码
viewsource
print?
/**************************************************
*
*DesignPattrenQuickStart
*01AbstractFactory-抽象工厂
*
**************************************************/
namespaceDesignPatternQuickStart.AbstractFactory
{
///
///产品A的接口
///
interfaceIProductA{}
///
///品种为1的产品A
///
classProductA1:
IProductA{}
///
///品种为2的产品A
///
classProductA2:
IProductA{}
///
///产品B的接口
///
interfaceIProductB{}
///
///品种为1的产品B
///
classProductB1:
IProductB{}
///
///品种为2的产品B
///
classProductB2:
IProductB{}
///
///抽象工厂接口
///
interfaceIAbstractFactory
{
IProductACreateProductA();
IProductBCreateProductB();
}
///
///生产1系列的具体工厂,用于生产品种为1为产品A和B
///
classFactory1:
IAbstractFactory
{
publicIProductACreateProductA()
{
returnnewProductA1();
}
publicIProductBCreateProductB()
{
returnnewProductB1();
}
}
///
///生产2系列的具体工厂,用于生产品种为2为产品A和B
///
classFactory2:
IAbstractFactory
{
publicIProductACreateProductA()
{
returnnewProductA2();
}
publicIProductBCreateProductB()
{
returnnewProductB2();
}
}
///
///客户类
///
classClient
{
publicvoidOpreateMethod()
{
IAbstractFactoryfactory1=newFactory1();
IProductAproductA1=factory1.CreateProductA();
IProductBproductB1=factory1.CreateProductB();
IAbstractFactoryfactory2=newFactory2();
IProductAproductA2=factory2.CreateProductA();
IProductBproductB2=factory2.CreateProductB();
}
}
}
02Builder(生成器)
简要说明
生成器模式首先定义一个生成器接口,接口中定义了生成一个产品(或逻辑上可看做整体的产品)各个部分的方法及返回这个产品的方法。
不同的生成器可以封装不同的生成算法。
客户类在构造函数中通过生成器生成需要的这个产品。
生成器适用于待构建对象十分复杂,并根据具体情况存在不同构建算法的场合,使用生成器模式后复杂对象的构建过程与使用过程分离。
结构类图
结构示例代码
viewsource
print?
/**************************************************
*
*DesignPattrenQuickStart
*02Builder-生成器
*
**************************************************/
namespaceDesignPatternQuickStart.Builder
{
///
///含有不同模块的产品
///
classProduct
{
publicintPartA{get;set;}
publicobjectPartB{get;set;}
publicstringPartC{get;set;}
}
///
///生成器接口
///
interfaceIBuilder
{
voidBuildPartA(intpartA);
voidBuildPartB(objectpartB);
voidBuildPartC(stringpartC);
ProductGetResult();
}
///
///具体的生成器
///
classBuilder:
IBuilder
{
protectedProduct_product;
publicBuilder()
{
this._product=newProduct();
}
//此处可以使用任意复杂的构造算法构造不同模块
publicvoidBuildPartA(intpartA)
{
this._product.PartA=partA;
}
publicvoidBuildPartB(objectpartB)
{
this._product.PartB=partB;
}
publicvoidBuildPartC(stringpartC)
{
this._product.PartC=partC;
}
publicProductGetResult()
{
returnthis._product;
}
}
///
///生成器的客户类
///
classClient
{
protectedProduct_product;
publicClient()
{
IBuilderbuider=newBuilder();
buider.BuildPartA(100);
buider.BuildPartB(null);
buider.BuildPartC("abc");
this._product=buider.GetResult();
}
}
}
03工厂方法(FactoryMethod)
简要说明
工厂方法通过一个抽象类实现了所有对产品的加工操作代码,唯独将产品的构建方法写成抽象方法。
继承这个抽象类的具体类只重写其构建方法,这样就实现了对于不同被构建产品复用相同的加工操作逻辑。
工厂方法适用于需要在子类中才能决定实例化哪个被操作对象,同时这些被操作对象又复用相同操作逻辑的场合。
结构类图
结构示例代码
viewsource
print?
/**************************************************
*
*DesignPattrenQuickStart
*03FactoryMethod-工厂方法
*
**************************************************/
namespaceDesignPatternQuickStart.FactoryMethod
{
///
///产品接口
///
interfaceIProduct{}
///
///A类型产品
///
classProductA:
IProduct{}
///
///B类型产品
///
classProductB:
IProduct{}
///
///含有工厂方法的抽象业务类
///
abstractclassACreator
{
protectedabstractIProductFactoryMethod();
publicvoidOpreateMethod()
{
IProductproduct=FactoryMethod();
//对product的一系列操作
}
}
///
///生产A类型产品的具体业务类
///
classCreatorA:
ACreator
{
protectedoverrideIProductFactoryMethod()
{
returnnewProductA();
}
}
///
///生产B类型产品的具体业务类
///
classCreatorB:
ACreator
{
protectedoverrideIProductFactoryMethod()
{
returnnewProductB();
}
}
///
///客户类
///
classClient
{
publicvoidOpreateMethod()
{
ACreatorcreatorA=newCreatorA();
creatorA.OpreateMethod();
ACreatorcreatorB=newCreatorB();
creatorB.OpreateMethod();
}
}
}
04Prototype(原型)
简要说明
原型模式定义一个原型接口,其中有克隆自身的方法及此接口所有实现及后代都应该具有的方法的定义。
其实现及实现的后代均重写克隆方法,使得克隆方法返回自身的一个克隆,克隆对象具有母对象的所有特性。
客户类使用不同对象的克隆实现对象的创建。
原型模式适用于需要创建许多来自同一抽象的不同后代对象,同时希望通过已有对象克隆来创建新对象的场合。
结构类图
结构示例代码
viewsource
print?
/**************************************************
*
*DesignPattrenQuickStart
*04Prototype-原型
*
**************************************************/
namespaceDesignPatternQuickStart.Prototype
{
///
///原型接口
///
interfaceIPrototype
{
IPrototypeClone();
}
///
///具体原型类A
///
classPrototypeA:
IPrototype
{
publicstringMember1{get;set;}
publicIPrototypeClone()
{
PrototypeAcloneObject=newPrototypeA();
cloneObject.Member1=Member1;
returncloneObject;
}
}
///
///具体原型类AA
///
classPrototypeAA:
PrototypeA
{
publicstringMember2{get;set;}
publicnewIPrototypeClone()
{
PrototypeAAcloneObject=newPrototypeAA();
cloneObject.Member1=Member1;
cloneObject.Member2=Member2;
returncloneObject;
}
}
///
///客户类
///
classClient
{
publicvoidOpreateMethod()
{
IPrototypeprototypeA1=newPrototypeA();
IPrototypeprototypeA2=prototypeA1.Clone();
IPrototypeprototypeAA1=newPrototypeAA();
IPrototypeprototypeAA2=prototypeAA1.Clone();
}
}
}
05Singleton(单件)
简要说明
单件模式试图保证单件类在全局只存在一个实例。
常用的方法是将构造函数设为私有,然后提供一个公用静态方法用于获取单例类的实例,这个公用静态方法保证每次都返回同一个实例。
单例模式适用于需要保证某个类在全局只存在一个实例的场合。
结构类图
结构示例代码
viewsource
print?
/**************************************************
*
*DesignPattrenQuickStart
*05Singleton-单件
*
**************************************************/
namespaceDesignPatternQuickStart.Singleton
{
///
///单件类
///
classSingleton
{
staticSingleton_instance;
privateSingleton(){}
publicstaticSingletonCreateInsta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 模式 手册 创建