23种设计模式_UML_类图及对应示例代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

23种设计模式UML 类图及对应示例代码(一) 收藏

1.DoFactory.GangOfFour.Abstract.Structural

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

工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

using System;

namespace DoFactory.GangOfFour.Abstract.Structural

{

///

/// MainApp startup class for Structural

/// Abstract Factory Design Pattern.

///

class MainApp

{

///

/// Entry point into console application.

///

public static void Main()

{

// Abstract factory #1

AbstractFactory factory1 = new ConcreteFactory1(); Client client1 = new Client(factory1);

client1.Run();

// Abstract factory #2

AbstractFactory factory2 = new ConcreteFactory2(); Client client2 = new Client(factory2);

client2.Run();

// Wait for user input

Console.Read();

}

}

// "AbstractFactory"

abstract class AbstractFactory

{

public abstract AbstractProductA CreateProductA();

public abstract AbstractProductB CreateProductB(); }

// "ConcreteFactory1"

class ConcreteFactory1 : AbstractFactory

{

public override AbstractProductA CreateProductA() {

return new ProductA1();

}

public override AbstractProductB CreateProductB()

{

return new ProductB1();

}

}

// "ConcreteFactory2"

class ConcreteFactory2 : AbstractFactory

{

public override AbstractProductA CreateProductA() {

return new ProductA2();

}

public override AbstractProductB CreateProductB() {

return new ProductB2();

}

}

// "AbstractProductA"

abstract class AbstractProductA

{

}

// "AbstractProductB"

abstract class AbstractProductB

{

public abstract void Interact(AbstractProductA a); }

// "ProductA1"

class ProductA1 : AbstractProductA

{

}

// "ProductB1"

class ProductB1 : AbstractProductB

{

public override void Interact(AbstractProductA a) {

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

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

}

}

// "ProductA2"

class ProductA2 : AbstractProductA

{

}

// "ProductB2"

class ProductB2 : AbstractProductB

{

public override void Interact(AbstractProductA a)

{

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

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

}

}

// "Client" - the interaction environment of the products

class Client

{

private AbstractProductA AbstractProductA;

private AbstractProductB AbstractProductB;

// Constructor

public Client(AbstractFactory factory)

{

AbstractProductB = factory.CreateProductB();

AbstractProductA = factory.CreateProductA();

}

public void Run()

{

AbstractProductB.Interact(AbstractProductA);

}

}

}

2.DoFactory.GangOfFour.Adapter.Structural

Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。

相关文档
最新文档