• 设计模式之建造者模式


    建造者模式定义

    建造者模式是一种创建型设计模式(有的也称之为生成器模式), 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。

    建造者模式结构

    image-20210708224104166

    1. 建造者/生成器(Builder):清晰的定义通用步骤,确保它们可以制造所有形式的产品。 否则你将无法进一步实施该模式。
    2. 具体建造者(ConcreteBuilder):每个形式的产品创建具体生成器类, 并实现其构造步骤。
    3. 指挥者(Director):它可以使用同一生成器对象来封装多种构造产品的方式。

    建造者模式实现

    场景:盖房子,房子都有房顶、四面墙壁、窗户和门,可以使用不同的材料,例如,第一个建造者使用木头和玻璃,第二个建造者使用石头和钢铁。在调用一组步骤后,第一个建造者得到的是一栋普通房屋,第二栋得到的是一栋城堡

    使用代码简单实现一下:

    声明创建房屋通用步骤的接口

       public interface IHouseBuilder
        {
            void buildWall();
            void buildRoof();
            void buildWindow();
            void buildDoor();
            void buildResult();
        }
    

    创建具体建造者,继承接口并实现

    public class House : IHouseBuilder
        {
            public void buildDoor()
            {
                Console.WriteLine("装房门");
            }
    
            public void buildResult()
            {
                Console.WriteLine("普通木屋");
            }
    
            public void buildRoof()
            {
                Console.WriteLine("盖房顶");
            }
    
            public void buildWall()
            {
                Console.WriteLine("盖墙壁");
            }
    
            public void buildWindow()
            {
                Console.WriteLine("安装窗户");
            }
        }
    

    创建指挥者,用于构建和组织步骤

    public class HouseDirector
        {
    
            public void Construct(IHouseBuilder houseBuilder)
            {
                houseBuilder.buildWall();
                houseBuilder.buildWall();
                houseBuilder.buildWindow();
                houseBuilder.buildDoor();
            }
        }
    

    客户端调用

    static void Main(string[] args)
            {
                HouseDirector houseDirector = new HouseDirector();
    
                Console.WriteLine("------------------盖一栋普通木屋------------------");
                IHouseBuilder houseBuilder1 = new House();
                houseDirector.Construct(houseBuilder1);
                houseBuilder1.buildResult();
    
                Console.WriteLine("------------------盖一栋城堡------------------");
                IHouseBuilder houseBuilder2 = new Tower();
                houseDirector.Construct(houseBuilder2);
                houseBuilder2.buildResult();
    
                Console.WriteLine("Press Any Key to end!");
                Console.ReadKey();
            }
    

    输出结果

    image-20210708224620956

    建造者模式优缺点

    优点

    • 可以分步创建对象, 暂缓创建步骤或递归运行创建步骤。
    • 生成不同形式的产品时, 你可以复用相同的制造代码。
    • 单一职责原则。 你可以将复杂构造代码从产品的业务逻辑中分离出来。

    缺点

    • 由于该模式需要新增多个类, 因此代码整体复杂程度会有所增加。

    建造者模式使用场景

    • 当你希望使用代码创建不同形式的产品(例如石头或木头房屋)时,可使用生成器模式
    • 使用生成器构造组合树或其他复杂对象。

    示例源代码

    源代码仓库地址:https://github.com/luchong0813/DesignModel

  • 相关阅读:
    【转】Winform窗体显示在父窗体的中间位置几种代码
    【转】图片上传
    【转】Web文件的ContentType类型大全
    【原】FileUpload控件上传文件
    【转】winform编程实现程序最小化到系统托盘代码
    【原】页面跳转以及表单提交中有中文的解决办法
    【转】asp.net弹出窗体大全
    .NET的发展及组成结构
    如何成为一个优秀的程序员?
    设计模式详细系列教程 (二) 创建型模式
  • 原文地址:https://www.cnblogs.com/chonglu/p/14988557.html
Copyright © 2020-2023  润新知