软件设计师23种设计模式总结.docx
- 文档编号:22903151
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:68
- 大小:1.44MB
软件设计师23种设计模式总结.docx
《软件设计师23种设计模式总结.docx》由会员分享,可在线阅读,更多相关《软件设计师23种设计模式总结.docx(68页珍藏版)》请在冰豆网上搜索。
软件设计师23种设计模式总结
创建型
结构型
行为型
类
FactoryMethod
Adapter
Interpreter
TemplateMethod
对象
AbstractFactoryBuilder
Prototype
Singleton
Apapter(对象)BridgeCompositeDecoratorFa?
adeFlyweightProxy
ChainofResponsibility
Command
Iteratot
Mediatot
Memento
Observer
State
Strategy
Visitor
1.AbstractFactory(抽象匸厂)
提供一个创建一系列相关或互相依赖对象的接口,而无须制定它们具体的类。
图10-25抽象工厂模式结构图
AbstractFactory抽象工厂
classProgram
{
staticvoidMain(string[]args)
{
AbstractFactoryfactoryl二newConcreteFactoryl():
Clientcl二newClient(factoryl):
cl.Run();
AbstractFactoryfactory2二newConereteFactory2();
Clientc2二newClient(factory2):
c2.Run();
Console・Read();
abstractclassAbstractFactory
publicabstractAbstractProductACreateProductA();publicabstractAbstractProductB
CreateProductBO;'
classConcreteFactoryl:
AbstractFactorv
{
publicoverrideAbstractProductACreatePtoductA()
{
returnnewProductAl();
}
publicoverrideAbstractProductBCreateProductB()
{
returnnewProductBl();
classConcreteFactory2:
AbstractFactory
{
publicoverrideAbstractProductACreateProductA()
{
returnnewProductA2();
)
publicoverrideAbstractProductBCreateProductB()
{
returnnewProductB2();
abstractclassAbstractProductAabstractclassAbstractProductB
{
publicabstractvoidInteract(AbstractProductAa);
classProductAl:
AbstractPtoductAclassProductBl:
AbstractProductB
{
publicoverridevoidInteract(AbstractProductAa)
{
Console・WriteLine(this・GetType()・Name+
,zinteractswith"+a.GetType().Name);
classProductA2:
AbstractProductA
classProductB2:
AbstractProductB
publicoverridevoidInteract(AbstractProductAa)(
Console・WriteLine(this・GetType().Name+〃interactswith"+&GetType().Name):
}
}
classClient
(
privateAbstractProductAAbstractProductA;
privateAbstractProductBAbstractPtoductB;
//Constructor
publicClient(AbstractFactoryfactory)
(
AbstractProductB二factory.CreateProductBO;AbstractProductA二factory.CreateProductA();
}
publicvoidRun()
AbstractProductB.Interact(AbstractProductA);
}
}
2.Builder(生成器)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Directo
r
Construct!
)
TC
forallobjectsinstructure
buildcr^BuildPartO
builder
O'—
图10-26生成器模式结构图
Builder生成器
classProgram
{
staticvoidMain(string[]args)
{
Directordirector二newDirector。
;
Builderbl=newConcreteBuilderl();
Builderb2二newConereteBuilder2();
director.Construet(b2);
Productp2=b2.GetResult();
p2.Show():
Console.Read();
}
}
classDirector
{
publicvoidConstruct(Builderbuilder){builder.BuildPartA();
builder.BuildPartB();
}
}abstractclassBuilder
publicabstractvoidBuildPartA();publicabstractvoidBu订dPartB();
publicabstractProductGetResult();
classConcreteBuilderl:
Builder
{
privateProductproduct二newProduct();
publicoverridevoidBuildPartA()
{
product.AddC'部件A");
}
publicoverridevoidBuildPartB()
{
product.Add(z/部件B");
}
publicoverrideProductGetResult()
{
returnproduct;
}
classConcreteBuilder2:
Builder
{
privateProductproduct二newProduct();publicoverridevoidBuildPartA()
product.Add(z/部件X");
}
publicoverridevoidBuildPartB()
{
product.AddC'部件Y");
}
publicoverrideProductGetResult()
{
returnproduct;
}
classProduct
{
IList〈string>parts二newList〈string>();
publicvoidAdd(stringpart)
parts.Add(part);
publicvoidShow()
Console.WriteLineC\n产品仓U建“);foreach(stringpart
inparts)
{
Console.WriteLine(part);
}
}
}
3.FactoryMethod(工厂方法)
定义一个用于创建对象的接口,让子类决定实例化哪一个类。
FactoryMethod使一个实例化延迟到其子类。
图10-27工厂方法模式结构图
FactoryMethodI]厂方法
classProgram
{
staticvoidMain(string[]args)
{
//
//基本方式:
薛磊风代表大学生学习雷锋
LeiFengxueleifeng二newUndergraduate();
xueleifeng.BuyRiceO;
xueleifeng.Sweep();
xueleifeng.WashO;
LeiFengstudentl二newUndergraduate();studentl・BuyRice();
LeiFengstudent2二newUndergraduate();student2.Sweep();
LeiFengstudent3二newUndergraduate();
student3・Wash();
//简单工厂模式
LeiFengstudentA=SimpleFactory.CreateLeiFengC学雷锋的大学生");studentA・BuyRice();
LeiFengstudentB=SimpleFactory.CreateLeiFengC学雷锋的大学生”);studentB.Sweep();
LeiFengstudentC二SimpleFactory.CreateLeiFeng(学雷锋的大学生");studentC.WashO;
//工厂方法模式
IFactoryfactory二newUndergraduateFactory();
LeiFengstudent二factory.CreateLeiFeng();
student.BuyRice();
student.Sweep();
student.WashO;
Console.Read();
}
)
//雷锋
classLeiFeng
{
publicvoidSweep()
{
Console.WriteLine(”扫地“);
}
publicvoidWashO
{
Console.WriteLine(”洗衣”);
}
publicvoidBuyRice()
{
Console.WriteLine(”买米”);
}
)
//学雷锋的大学生
classUndergraduate:
LeiFeng
{}//社区志愿者classVolunteer:
LeiFeng
{}
//简单雷锋工厂
classSimpleFactory
{
publicstaticLeiFengCreateLeiFeng(stringtype)
{
LeiFengresuIt二null;
switch(type)
(
case〃学雷锋的大学生〃:
resuIt二newUndergraduate():
break;case〃社区志愿者〃:
resuIt二newVolunteer():
break;
}
returnresuIt;
)
}
//雷锋工厂
interfaceIFactory
{
LeiFengCreateLeiFengO;
}
//学雷锋的大学生工厂
classUndergraduateFactory:
IFactory
{
publicLeiFengCreateLeiFengO
{
returnnewUndergraduate();
//社区志愿者工厂
classVolunteerFactory:
IFactory
{
publicLeiFengCreateLeiFengO
{
returnnewVolunteer();
4.Prototype(原型)用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象。
5.
图10-28原型模式结构图
Prototype原型
classProgram
{
staticvoidMain(string[]args)
{
ConeretePtototypelpl二newConeretePrototypel("l");
ConeretePrototypelcl二(ConeretePrototypel)p1.CIone();
Console.WriteLine("Cloned:
{0}",cl.Id);
ConeretePtototype2p2二newConeretePrototype2(〃II〃);
ConcretePrototype2c2二(ConeretePrototype2)p2・Clone();
Console.WriteLine("Cloned:
{0}",c2.Id);
//Waitforuser
Console・ReadO;
}
abstractclassPrototype{
privatestringid;
//Construetor
publicPrototype(stringid){
this.id二id;
}//PropertypublicstringId
get{:
returnid;}
publicabstractPrototypeClone();
classConcretePrototypel:
Prototype
{
//Construetor
publicConcretePrototypel(stringid)
:
base(id)
{
}
publicoverridePrototypeClone()
{
//Shallowcopy
return(Prototype)this・MemberwiseClone();
classConcretePrototype2:
Prototype
{
//Construetor
publicConcretePrototype2(stringid)
:
base(id)
{
}
publicoverridePrototypeClone()
{
//Shallowcopy
return(Prototype)this・MemberwiseClone();
6.Singleton(单例)保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Singleton
returnuniqueinstance
staticInstance()0
SingletonOperationO
GetSingletonDataO
图10-29单例模式结构I
staticuniqueinstancesingletonData
Singleton
classProgram
{
staticvoidMain(string[]args)
{
Singletonsi二Singleton.Getlnstanee():
Singletons2二Singleton.Getlnstanee();
if(si二二s2)
{
Console.WriteLine("Objectsarethesameinstanee");
}
Console・Read();
}
}classSingleton
{
privatestaticSingletoninstanee;
privatestaticreadonlyobjectsyncRoot二newobject();privateSingleton()
{
}publicstaticSingletonGetlnstanee(){
if(instanee二二nuII)
{
lock(syncRoot){
if(instanee二二null)
instanee二newSingleton();
}
}
returninstanee;
将一个类的接口转换成客户希望的另一个接口。
接口不兼容而不能一起工作的那
1.Adapter(适配器)
Adapter模式使得原木由于
图10-30娄适配器结构图
Adapter
classProgram
{
staticvoidMain(string[]args)
{
Targettarget二newAdapter();target・Request();
Console.ReadO;
classTarget
publicvirtualvoidRequest()
Console.WriteLineC普通请求〃);
classAdaptee
publicvoidSpecificRequest()
Console.WriteLine(z,特殊请求〃);
}
classAdapter:
Target
privateAdapteeadaptee二newAdaptee();
publicoverridevoidRequest()
{
adaptee.SpecificRequest();
}
}
2.Bridge(桥接)
将抽象部分与其实现部分分离,使它们都可以独立的变化。
图10-32桥接模式結构图
Bridge
classProgram
{
staticvoidMain(stringL]args)
{
Abstractionab二newRefinedAbstraction();
ab.Setlmplementor(newConcretelmplementorA());
ab.Operation();
ab.Setlmplementor(newConcretelmplementorB());ab.Operation();
classAbstraction
{
protectedImplementorimplementor;
publicvoidSetlmplementor(Implementorimplementor)this・implementor二implementor;
}
publicvirtualvoidOperation()
implementor.Operation();
}
classRefinedAbstraction:
Abstraction{
publicoverridevoidOperation()implementor.Operation();
}
abstractclassImplementor
{
publicabstractvoidOperation();
classConcretelmplementorA:
Implementor
{
publicoverridevoidOperation()
{
Console.WriteLineC'具体实现A的方法执行“);
}
classConcretelmplementorB:
Implementor
{
publicoverridevoidOperation()
Console.WriteLineC具体实现B的方法执行“);
3.Composite(组合)
“部分----整体”的层次结构。
Composite使
图J0-33组合模式结构图
Composite
classProgram
{
staticvoidMain(string[]args)
{
Composite:
root二newComposite("root");
root.Add(newLeaf("LeafA"));
root.Add(newLeaf("LeafB〃));
Compositecomp二newComposite("CompositeX");
comp.Add(newLeafC'LeafXA"));
comp.Add(newLeaf("LeafXB"));
root.Add(comp);
Compositecomp2二newComposite("CompositeXY");
comp2.Add(newLeaf("LeafXYA"));
comp2.Add(newLeaf("LeafXYB"));
comp.Add(comp2);
root.Add(newLeaf("LeafC"));
Leafleaf二newLeaf("LeafD");
root.Add(leaf);
:
root.Remove(leaf);
root.Display
(1);
abstractclassComponent
protectedstringname;
publicComponent(stringname)
this.name二name;
publicabstractvoidAdd(Componentc):
publicabstractvoidRemove(Componentc);
publicabstractvoidDisplay(intdepth);
}
classComposite:
Component
{
privateList〈Component〉children二newList〈Component〉();
publicComposite(stringname)
:
base(name)
{}
publicoverridevoidAdd(Componentc)children.Add(c);
}
publicoverridevoidRemove(Componentc)
'children.Remove(c);
)
publicoverridevoidDisplay(intdepth)
{
Console.WriteLine(newString(J」,depth)+name);
foreach(Co
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 设计师 23 设计 模式 总结