软件设计师23种设计模式总结.docx

上传人:b****1 文档编号:22903151 上传时间:2023-04-29 格式:DOCX 页数:68 大小:1.44MB
下载 相关 举报
软件设计师23种设计模式总结.docx_第1页
第1页 / 共68页
软件设计师23种设计模式总结.docx_第2页
第2页 / 共68页
软件设计师23种设计模式总结.docx_第3页
第3页 / 共68页
软件设计师23种设计模式总结.docx_第4页
第4页 / 共68页
软件设计师23种设计模式总结.docx_第5页
第5页 / 共68页
点击查看更多>>
下载资源
资源描述

软件设计师23种设计模式总结.docx

《软件设计师23种设计模式总结.docx》由会员分享,可在线阅读,更多相关《软件设计师23种设计模式总结.docx(68页珍藏版)》请在冰豆网上搜索。

软件设计师23种设计模式总结.docx

软件设计师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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1