当前位置:文档之家› 软件设计师23种设计模式总结

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

创建型结构型行为型类Factory Method AdapterIn terpreterTemplate Method 对象Abstract Factory BuilderPrototypeSi ngleto nApapter(对象) BridgeComposite DecoratorFa?ade Flyweight ProxyChain of Resp on sibilityComma ndIteratorMediatorMeme ntoObserverStateStrategyVisitor(抽象工厂)提供一个创建一系列相关或互相依赖对象的接口,而无须制定它们具体的类。

图10-25抽象工厂模式结构图Abstract Factory 抽象工厂class Program{static void Main(string[] args){AbstractFactory factory1 = new Con creteFactory1();Clie nt c1 = new Clie nt(factory1);c1.Ru n();AbstractFactory factory2 = new Con creteFactory2();Clie nt c2 = new Clie nt(factory2);c2.Ru n();Co nsole.Read();abstract class AbstractFactory{public abstract AbstractProductA CreateProductA(); public abstract AbstractProductBCreateProductB(); }class ConcreteFactory1 : AbstractFactory{public override AbstractProductA CreateProductA() {return new ProductA1();}public override AbstractProductB CreateProductB() {return new ProductB1();}}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 ProductA1 : AbstractProductA{}class ProductB1 : AbstractProductB{public override void Interact(AbstractProductA a) {Console.WriteLine(this.GetType().Name +"interacts with " + a.GetType().Name);class ProductA2 : AbstractProductA{}class ProductB2 : AbstractProductB{public override void Interact(AbstractProductA a){Console.WriteLine(this.GetType().Name +"interacts with " + a.GetType().Name);}}class Client{private AbstractProductA AbstractProductA;private AbstractProductB AbstractProductB;// Constructorpublic Client(AbstractFactory factory){AbstractProductB = factory.CreateProductB();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 b1 = new ConcreteBuilder1(); Builder b2 = new Con creteBuilder2(); director.C on struct(b1);Product p1 = b1.GetResult(); p1.Show();director.C on struct(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 {public abstract void BuildPartA(); public abstract void BuildPartB();DirectorbuilderO'—Construct!)CTfor all objects in structure}buildcr^BuildPartOpublic abstract Product GetResult();class ConcreteBuilder1 : Builder{private Product product = new Product();public override void BuildPartA(){product.Add("部件A");}public override void BuildPartB(){product.Add("部件B");}public override Product GetResult(){return product;}}class ConcreteBuilder2 : Builder{private Product product = new Product();public override void BuildPartA(){product.Add("部件X");}public override void BuildPartB(){product.Add("部件Y");}public override Product GetResult(){return product;}}class Product{IList<string> parts = new List<string>();public void Add(string part){parts.Add(part);Factory Method使一个实例化延迟到其子类。

public void Show(){Console.WriteLine("\n 产品创建——"); foreach (stri ng partin parts){Con sole.WriteL in e(part);}}}3. Factory Method (工厂方法)定义一个用于创建对象的接口,让子类决定实例化哪一个类。

图10-27工厂方法模式结构图Factory Method 工厂方法class Program{static void Main(string[] args){////基本方式:薛磊风代表大学生学习雷锋LeiFe ng xueleife ng = new Un dergraduate();xueleife ng.BuyRice();xueleife ng.Sweep();xueleife ng.Wash();LeiFe ng stude nt1 = new Un dergraduate(); student1.BuyRice();LeiFe ng stude nt2 = new Un dergraduate(); student2.Sweep();LeiFe ng stude nt3 = new Un dergraduate();student3.Wash();// 简单工厂模式LeiFeng studentA = SimpleFactory.CreateLeiFeng('学雷锋的大学生");studentA.BuyRice();LeiFeng studentB = SimpleFactory.CreateLeiFengC学雷锋的大学生”);studentB.Sweep();LeiFeng studentC = SimpleFactory.CreateLeiFeng(学雷锋的大学生");studentC.Wash();// 工厂方法模式IFactory factory = new UndergraduateFactory();LeiFeng student = factory.CreateLeiFeng();student.BuyRice();student.Sweep();student.Wash();Console.Read();}}// 雷锋class LeiFeng{public void Sweep(){Con sole.WriteLi ne(” 扫地");}public void Wash(){Con sole.WriteLi ne(” 洗衣");}public void BuyRice(){Con sole.WriteLi ne(” 买米");}}// 学雷锋的大学生class Undergraduate : LeiFeng{ } // 社区志愿者class Volunteer : LeiFeng{ }// 简单雷锋工厂class SimpleFactory{public static LeiFeng CreateLeiFeng(string type){LeiFeng result = null;switch (type){case "学雷锋的大学生":result = new Undergraduate(); break;case "社区志愿者":result = new Volunteer(); break;}return result;}}// 雷锋工厂interface IFactory{LeiFeng CreateLeiFeng();}// 学雷锋的大学生工厂class UndergraduateFactory : IFactory{public LeiFeng CreateLeiFeng(){return new Undergraduate();}}// 社区志愿者工厂class VolunteerFactory : IFactory{public LeiFeng CreateLeiFeng(){return new Volunteer();}}4. Prototype (原型) 用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象。

相关主题