zoukankan      html  css  js  c++  java
  • 9、建造者(生成器)模式

    建造者(生成器)模式:

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    如果我们采用建造者模式,我们只需要指定需要创建的类型就可以得到他们,而不需要了解具体的创建过程和细节。

    建造者模式UML结构图:

    建造者(Builder)角色:定义创建一个Product对象所需的各个部件的操作。
    具体建造者(Concrete Builder)角色:实现Builder角色提供的接口,一步一步完成创建产品实例的过程。在建造过程完成后,提供产品的实例。
    指导者(Director)角色:主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。
    产品(Product)角色:产品便是建造中的复杂对象。

    何时使用:创建一些比较复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但是对象内部的构建通常面临着复杂的变化。

    基本代码:

     	class Director
        {
            public void Construct(Builder builder)
            {
                builder.BuildPartA();
                builder.BuildPartB();
            }
        }
    
        abstract class Builder
        {
            public abstract void BuildPartA();
            public abstract void BuildPartB();
            public 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);
            }
    
            public void Show()
            {
                Console.WriteLine("
    产品 创建 ----");
                foreach (string part in parts)
                {
                    Console.WriteLine(part);
                }
            }
        }
    
    	class Program
        {
            static void Main(string[] args)
            {
                Director director = new Director();
                Builder b1 = new ConcreteBuilder1();
                Builder b2 = new ConcreteBuilder2();
    
                director.Construct(b1);
                Product p1 = b1.GetResult();
                p1.Show();
    
                director.Construct(b2);
                Product p2 = b2.GetResult();
                p2.Show();
    
                Console.Read();
            }
        }
    

    例:

  • 相关阅读:
    [Todo]很不错的Java面试题类型整理,要看
    [Todo] Java并发编程学习
    自建一个Java Spring MVC项目
    [Todo] 乐观悲观锁,自旋互斥锁等等
    [Todo] Redis里面队列的两种模式,以及抢红包在Redis中的实现
    hdu 4704 同余定理+普通快速幂
    [置顶] ubuntu 和 win7 远程登陆 + vnc登陆
    mysql之触发器
    Jsoup API解析HTML中input标签
    IOS UITableView单条刷新,数据不刷新解决方案
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/13160976.html
Copyright © 2011-2022 走看看