C# 设计模式——建造者模式(builder)

建造者(Builder)模式:将一个复杂对象拆解成多个相对简单的部分,根据不同需要分别实现它们,
最后组成该复杂对象。

建造者模式和抽象工厂方法区别在于,前者核心是将一个复杂的对象拆解成一个小的部分然后由所有整体
组成一个复杂的对象提供给调用者。
而后者并没有拆的概念,将各个分部组合起来的不是一个单独存在的对象。
复制代码

using System;
namespace BuilderModel
{
    // 你要装修一个家
    public class House { }
    // 装修一个新家大致步骤
    public abstract class Builder
    {
        public abstract void BuildDoor();
        public abstract void BuildWall();
        public abstract void BuildWindow();
        public abstract void BuildFloor();
        public abstract void BuildCelling();
        public abstract House getHouse();   
    }

    // 包工头
    public class Director {
        public void Construct(Builder builder) {
            builder.BuildCelling();
            builder.BuildWall();
            builder.BuildWindow();
            builder.BuildDoor();
            builder.BuildFloor();         
        }
    }
    // 中式风格
    public class CNStyle : Builder
    {
        private House cnHouse = new House();
        private string style = "中式";
        public override void BuildCelling()
        {
            Console.WriteLine(style+"集成吊顶");
        }

        public override void BuildDoor()
        {
            Console.WriteLine(style + "烤漆门");
        }

        public override void BuildFloor()
        {
            Console.WriteLine(style + "大理石地板");
        }

        public override void BuildWall()
        {
            Console.WriteLine(style + "乳胶漆大白");
        }

        public override void BuildWindow()
        {
            Console.WriteLine(style + "防盗窗");
        }

        public override House getHouse()
        {
            return cnHouse;
        }
    }
    
    // 欧式风格
    public class EUStyle : Builder
    {
        private House euHouse = new House();
        private string style = "欧式";
        public override void BuildCelling()
        {
            Console.WriteLine(style + "集成吊顶");
        }

        public override void BuildDoor()
        {
            Console.WriteLine(style + "烤漆门");
        }

        public override void BuildFloor()
        {
            Console.WriteLine(style + "大理石地板");
        }

        public override void BuildWall()
        {
            Console.WriteLine(style + "乳胶漆大白");
        }

        public override void BuildWindow()
        {
            Console.WriteLine(style + "防盗窗");
        }

        public override House getHouse()
        {
            return euHouse;
        }
    }


    public class Test {

        static void Main(string[] args){
            Builder cn = new CNStyle();
            Builder eu = new EUStyle();

            Director pd = new Director();
            pd.Construct(eu);// 告诉包工头你选哪种风格
        }
    }
}

复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享