• CSharp设计模式读书笔记(6):建造者模式(学习难度:★★★★☆,使用频率:★★☆☆☆)


    建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    模式角色与模式:

    建造者模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。

    示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace CSharp.DesignPattern.BuilderPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Director director = new Director();
    
                IBuilder b1 = new ConcreteBuilder1();
                IBuilder b2 = new ConcreteBuilder2();
    
                Product p1;
                Product p2;
    
                director.Construct(b1);
                p1 = b1.GetResult();
    
                director.Construct(b2);
                p2 = b2.GetResult();
    
                p1.Display();
                p2.Display();
    
                Console.ReadLine();
            }
        }
    
        // 指挥者
        class Director
        {
            public void Construct(IBuilder builder)
            {
                builder.BuildPartA();
                builder.BuildPartB();
            }
        }
        
        // 抽象建造者 
        interface IBuilder
        {
            void BuildPartA();
            void BuildPartB();
            Product GetResult();
        }
    
        // 具体建造者
        class ConcreteBuilder1 : IBuilder
        {
            private Product product;
    
            public void BuildPartA()
            {
                product = new Product();
                product.Add("PartA");
            }
    
            public void BuildPartB()
            {
                product.Add("PartB");
            }
    
            public Product GetResult()
            {
                return product;
            }
        }
    
        // 具体建造者
        class ConcreteBuilder2 : IBuilder
        {
            private Product product;
    
            public void BuildPartA()
            {
                product = new Product();
                product.Add("PartX");
            }
    
            public void BuildPartB()
            {
                product.Add("PartY");
            }
    
            public Product GetResult()
            {
                return product;
            }
        }
    
        class Product
        {
            List<String> parts = new List<String>();
    
            public void Add(String part)
            {
                parts.Add(part);
            }
    
            public void Display()
            {
                Console.WriteLine("Display result:");
                foreach (String obj in parts)
                {
                    Console.WriteLine(obj);
                }
            }
        }
    }
     
  • 相关阅读:
    Bitcode设置 编译问题
    NSDate 时间比较...等
    MagicalRecord 多表关联数据操作
    简单的 同步 异步 请求
    pod创建的工程找不到库
    UITableViewCell 自适应高度 ios8特性
    iOS中nil、Nil、NULL、NSNull详解(转)
    c++ wchar_t 与char 直接的转换【转】
    VS 2010 转到COFF期间失败。
    OpenCV中阈值(threshold)函数: threshold 。
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993125.html
Copyright © 2020-2023  润新知