C#设计模式——(创建型-建造者设计模式)

2022-10-09 17:21:00 浏览数 (2)

一、应用场景

在软件开发中,有时会面临着一个复杂对象的创建工作,通常各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分也经常面临着剧烈的变化,但是将他们组合到一起却相对的稳定。

子部件较多,没有恰当赋值之前,对象不能当做一个完整的对象或者产品使用(邮件包括发件人、收件人、抄送人、主题、内容)

子部件需要按照一定顺序进行赋值才有意义,在某个子部件没有赋值之前,另一个子部件就无法赋值(装修要先改水电、再贴瓷砖、家电、电视墙)

二、小白装电脑

代码语言:javascript复制
         public class Computer
        {
            private List<string> lstPart = new List<string>();
            public void Addpart(string part)
            {
                lstPart.Add(part);
            }
            public void ShowComputer()
            {
                foreach (string item in lstPart)
                {
                    Console.WriteLine("正在安装" item);
                }
            }
        }
代码语言:javascript复制
           //问题1、所有的内容全部由客户自己搞定
           //问题2、创建对象和客户端强耦合
             Computer computer = new Computer();
            computer.Addpart("i5的CPU");
            computer.Addpart("独显");
            computer.Addpart("256G的硬盘");
            computer.Addpart("17寸的显示器");
            computer.Addpart("win10的操作系统");

三、老鸟装电脑

建造者模式,是将一个复杂对象的创建和它的表示分离,使得同样的创建过程,可以创建不同的对象。在建造者模式中出现的四个不同类对象:

  • AbstractBuilder 抽象建造者,为创建一个产品对象的各个部件指定的抽象接口,在该接口或抽象类中,提供两种方法:一是各个组件的创建方法,二是产品对象的返回方法,用于将创建完的对象返回;
  • ConcreteBuilder 具体建造者,实现或者继承抽象建造者,实现各个组件的创建方法和对象返回方法。
  • Product 被构建的复杂产品对象,包含多个组件;
  • Director 监工,负责安排复杂对象的创建顺序。
代码语言:javascript复制
        //具体的产品
        public class Computer
        {
            private List<string> lstPart = new List<string>();
            public void Addpart(string part)
            {
                lstPart.Add(part);
            }
            public void ShowComputer()
            {
                foreach (string item in lstPart)
                {
                    Console.WriteLine("正在安装" item);
                }
            }
        }
        //抽象的创建者
        public interface IbuilderComputer
        {
            //1.封装创建各个对象的过程
            void BuildCpu();
            void BuildDisk();
            void BuildMemory();
            void BuildScreen();
            void BuildSystem();
            //2.将创建好的对象返回
            Computer GetComputer();
        }
        //高配电脑 具体的创建者
        public class GoodComputer : IbuilderComputer
        {
            private Computer computer = new Computer();
            public void BuildCpu()
            {
                computer.Addpart("i7的cpu");
            }

            public void BuildDisk()
            {
                computer.Addpart("2T的固态硬盘");
            }

            public void BuildMemory()
            {
                computer.Addpart("32G的内存");
            }

            public void BuildScreen()
            {
                computer.Addpart("32寸的显示器");
            }

            public void BuildSystem()
            {
                computer.Addpart("win10处理器");
            }

            public Computer GetComputer()
            {
                return this.computer;
            }
        }
        //低配电脑 具体的创建者
        public class LowComputer : IbuilderComputer
        {
            private Computer computer = new Computer();
            public void BuildCpu()
            {
                computer.Addpart("i3的cpu");
            }

            public void BuildDisk()
            {
                computer.Addpart("1T的固态硬盘");
            }

            public void BuildMemory()
            {
                computer.Addpart("16G的内存");
            }

            public void BuildScreen()
            {
                computer.Addpart("20寸的显示器");
            }

            public void BuildSystem()
            {
                computer.Addpart("win8处理器");
            }

            public Computer GetComputer()
            {
                return this.computer;
            }
        }
        //监工 创建对象的顺序
        public class Directory
        {
            public void BuildComputer(IbuilderComputer builderComputer)
            {
                builderComputer.BuildCpu();
                builderComputer.BuildDisk();
                builderComputer.BuildMemory();
                builderComputer.BuildScreen();
                builderComputer.BuildSystem();
            }
        }
代码语言:javascript复制
            IbuilderComputer b1 = new GoodComputer();
            IbuilderComputer b2 = new LowComputer();
            Directory directory = new Directory();
            //让b1这个具体的创建者按照稳定的过程(要求的逻辑),进行复杂对象的创建
            directory.BuildComputer(b1);
            Computer computer1= b1.GetComputer();
            computer1.ShowComputer();
            directory.BuildComputer(b2);
            Computer computer2 = b2.GetComputer();
            computer2.ShowComputer();

0 人点赞