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

1. Abstract Factory (抽象匸厂)

提供一个创建一系列相关或互相依赖对象的接口,而无须制定它们具体的类。

图10-25抽象工厂模式结构图

Abstract Factory 抽象工厂

class Program

{

static void Main(string[] args)

{

AbstractFactory factoryl 二new Con creteFactoryl():

Clie nt cl 二new Clie nt (factoryl):

cl. Ru n();

AbstractFactory factory2 二new Con ereteFactory2();

Clie nt c2 二new Clie nt(factory2):

c2. Ru n();

Co nsole? Read();

abstract class AbstractFactory

public abstract AbstractProductA CreateProductA(); public abstract AbstractProductB CreateProductBO ; '

class ConcreteFactoryl : AbstractFactorv

{

public override AbstractProductA CreatePtoductA()

{

return new ProductAl();

}

public override AbstractProductB CreateProductB()

{

return new ProductBl();

class ConcreteFactory2 : AbstractFactory

{

public override AbstractProductA CreateProductA()

{

return new ProductA2();

)

public override AbstractProductB CreateProductB()

{

return new ProductB2();

abstract class AbstractProductA abstract class AbstractProductB

{

public abstract void Interact(AbstractProductA a);

class ProductAl : AbstractPtoductA class ProductBl : AbstractProductB

{

public override void Interact(AbstractProductA a)

{

Console? WriteLine(this? GetType()? Name +

,z interacts with " + a. GetType (). Name);

class ProductA2 : AbstractProductA

class ProductB2 : AbstractProductB

public override void Interact(AbstractProductA a) (

Console? WriteLine(this? GetType(). Name + 〃interacts with " + & GetType(). Name): }

}

class Client

(

private AbstractProductA AbstractProductA;

private AbstractProductB AbstractPtoductB;

// Constructor

public Client(AbstractFactory factory)

(

AbstractProductB 二factory. CreateProductBO; AbstractProductA 二factory. CreateProductA();

}

public void Run()

AbstractProductB. Interact(AbstractProductA);

}

}

2.Builder (生成器)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

图10-26生成器模式结构图

Builder 生成器

class Program

{

static void Main(string[] args) {

Director director 二 new Director 。; Builder bl = new ConcreteBuilderl(); Builder b2 二 new Con ereteBuilder2();

director. C on struet(b2); Product p2 = b2.GetResult(); p2. Show():

Co nsole. Read(); } }

class Director {

public void Con struct(Builder builder) { builder. BuildPartA();

builder. BuildPartB(); }

} abstract class Builder

Directo r

Construct!)

T

C

for all objects in structure

buildcr^BuildPartO

builder O' —

director. C on struet (bl);

Product pl =bl. GetResult () pl. Show();

public abstract void BuildPartA(); public abstract void Bu订dPartB ();

public abstract Product GetResult();

class ConcreteBuilderl : Builder

{

private Product product 二new Product();

public override void BuildPartA()

{

product. AddC'部件A");

}

public override void BuildPartB()

{

product. Add(z/部件B");

}

public override Product GetResult()

{

return product;

}

class ConcreteBuilder2 : Builder

{

private Product product 二new Product(); public override void

BuildPartA()

product. Add(z/部件X");

}

public override void BuildPartB()

{

product. AddC'部件Y");

}

public override Product GetResult()

{

return product;

}

class Product

{

IList〈string> parts 二new List〈string>();

public void Add(string part)

parts. Add (part);

public void Show()

Console. Write Line C\n产品仓U 建“);foreach (stri ng par t

in parts)

{

Con sole.WriteL in e (part);

}

}

}

3.Factory Method(工厂方法)

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

Factory Method使一个实例化延迟到其子类。

图10-27工厂方法模式结构图

Factory Method I]厂方法

class Program

{

static void Main(string[] args)

{

//

//基本方式:薛磊风代表大学生学习雷锋

LeiFe ng xueleife ng 二new Un dergraduate();

xueleife ng. BuyRiceO ;

xueleife ng. Sweep ();

xueleife ng. WashO ;

LeiFe ng stude ntl 二new Un dergraduate() ; stude ntl?

BuyRice ();

LeiFe ng stude nt2 二new Un dergraduate () ; stude nt2. Sweep

();

LeiFe ng stude nt3 二new Un dergraduate ();

student3? Wash ();

//简单工厂模式

LeiFeng studentA = SimpleFactory. CreateLeiFeng C学雷锋的大学生");

studentA? BuyRice();

LeiFeng studentB = SimpleFactory. CreateLeiFengC 学雷锋的大学生”);

studentB. Sweep ();

LeiFeng studentC 二SimpleFactory. CreateLeiFeng(学雷锋的大学生");

studentC. WashO ;

//工厂方法模式

IFactory factory 二new UndergraduateFactory();

LeiFeng student 二factory. CreateLeiFeng();

student. BuyRice ();

student. Sweep ();

student. WashO ;

Console. Read ();

}

)

相关主题
相关文档
最新文档