zoukankan      html  css  js  c++  java
  • 创建者模式

    意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 下面会发现模式实现方式与策略模式,桥接模式等都是相似的,唯有意图不同而已.此为创建者模式

    image_2

    创建者模式在平时生活中很常见,如肯德基的套餐,可乐可以跟很多东西组合成一个套餐.而你向服务员要的就是一个套餐,服务员就把不同东西组合在一起成了一个套餐,然后给你.

    1.定义产品类

    class Product {
       List <string> parts = new List <string> ();
       public void Add(string part) {
         parts.Add(part);
       }
     
       public void Display() {
         Console.WriteLine("\nProduct Parts -------");
         foreach (string part in parts)
           Console.Write(part);
         Console.WriteLine();
       }
     }

    2.定义创建接口与对象

    interface IBuilder {
       void BuildPartA();
       void BuildPartB();
       Product GetResult();
     }
     
     class Builder1 : IBuilder {
       private Product product = new Product();
       public  void BuildPartA() {
         product.Add("PartA ");
       }
     
       public void BuildPartB() {
         product.Add("PartB ");
       }
     
       public Product GetResult() {
         return product;
       }
     }
     
     class Builder2 : IBuilder {
       private Product product = new Product();
       public void BuildPartA() {
         product.Add("PartX ");
       }
     
       public void BuildPartB() {
         product.Add("PartY ");
       }
     
       public Product GetResult() {
         return product;
       }
     }

    3.开始组合创建

    class Director {
       // Builder uses a complex series of steps
       public void Construct(IBuilder builder) {
         builder.BuildPartA();
         builder.BuildPartB();
         builder.BuildPartB();
       }
     }

    4.客户端调用

    public static void Main() { 
       // Create one director and two builders
       Director director = new Director();
     
       IBuilder b1 = new Builder1();
       IBuilder b2 = new Builder2();
     
       // Construct two products
       director.Construct(b1);
       Product p1 = b1.GetResult();
       p1.Display();
     
       director.Construct(b2);
       Product p2 = b2.GetResult();
       p2.Display();
       Console.ReadKey();
     }

    此模式也是抽象的结果,与其他一些模式实现方式差不多,唯一不同的是意图

  • 相关阅读:
    高级软件工程2017第2次作业—— 个人项目:四则运算题目生成程序(基于控制台)
    高级软件工程2017第1次作业
    2017高级软件工程 课程信息
    15061009-第0次作业(阅读与感想)
    新的開始!第一次作業
    软工实践第一次作业
    OO第四单元作业总结
    OO第二单元作业总结
    OO第一单元作业总结
    Dell BOSS 卡是什么
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1809558.html
Copyright © 2011-2022 走看看