• 建造者模式


    代码
    using System;
    using System.Collections.Generic;

    public class Product
    {
        
    }

    public abstract class Builder
    {
        
    public abstract void BuildPartA();
        
    public abstract void BuildPartB();
        
    public abstract Product getResult();
    }

    public class ConBuilder1:Builder
    {
        
    public override void BuildPartA()
        {
        
        }
        
    public override void BuildPartB()
        {
        
        }
        
        
    public override Product getResult()
        {
            
    return new Product();
        }
    }
    public class Conbuilder2:Builder
    {
        
    public override void BuildPartA()
        {
        
        }
        
    public override void BuildPartB()
        {
        
        }
        
    public override Product getResult()
        {
            
    return new Product();    
        }
    }

    public class Director
    {
        
    public void Construct(Builder builder)
        {
            builder.BuildPartA();
            builder.BuildPartB();
        }
    }

    public class MyClass
    {
        
    public static void Main()
        {
            Director myDirector
    =new Director();
            Builder builder1
    =new ConBuilder1();
            myDirector.Construct(builder1);        
            Product myProduct
    =builder1.getResult();
        }
    }

    Builder模式的缘起:
        假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房 屋构建的重新修正.....
    动机(Motivation):
        在软件系统中,有时候面临一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合到一起的算法却相对稳定
        如何应对种变化呢?如何提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"不随需求的改变而改变?
    意图(Intent):
        将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
                                                  -------《设计模式》GOF

  • 相关阅读:
    c++中单引号和双引号的区别
    C++ 数组
    C++ 输出到文本文件
    C++中文本的读入
    C++ 输入和输出
    C++构造函数和文件组织
    Linux中使用gcc编译文件
    linux下修改gcc编译器版本
    Git--创建与合并分支
    'webpack' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/mikechang/p/1705294.html
Copyright © 2020-2023  润新知