zoukankan      html  css  js  c++  java
  • 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);
                }
            }
        }
    }
     
  • 相关阅读:
    linux 获取外网ip地址
    出现大量rcuob进程
    禁用 ipv6
    centos yum 坏掉 db 损坏
    关于 solusvm
    VMWare 下 Ubuntu 18.04 的文件共享
    安装最新版本 nginx
    大量的Close_wait 发现的 too many open file 错
    Linux安装Desktop 和 vncserver
    MySQL in和limit不能连用的问题
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3993125.html
Copyright © 2011-2022 走看看