建造者模式

代码
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

原文地址:https://www.cnblogs.com/mikechang/p/1705294.html