生成器模式

本文介绍了生成器模式,它通过将复杂对象的构建步骤与实际构建分离,使得对象构造更易于管理。主要角色包括产品、抽象生成器、具体生产器和指挥者,通过实例化HPComputerBuilder和Director类展示了如何按步骤构造一台计算机。
摘要由CSDN通过智能技术生成

定义:封装一个复杂对象构造过程,并允许按步骤构造。

定义解释: 我们可以将生成器模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Component)组合而成,每个组件的建立都比较复杂,但运用组件来建立所需的对象非常简单,所以我们就可以将构建复杂组件的步骤与运用组件构建对象分离,使用builder模式可以建立。

生成器模式结构中包括四种角色:

(1)产品(Product):具体生产器要构造的复杂对象;

(2)抽象生成器(Bulider):抽象生成器是一个接口,该接口除了为创建一个Product对象的各个组件定义了若干个方法之外,还要定义返回Product对象的方法(定义构造步骤);

(3)具体生产器(ConcreteBuilder):实现Builder接口的类,具体生成器将实现Builder接口所定义的方法(生产各个组件);

(4)指挥者(Director):指挥者是一个类,该类需要含有Builder接口声明的变量。指挥者的职责是负责向用户提供具体生成器,即指挥者将请求具体生成器类来构造用户所需要的Product对象,如果所请求的具体生成器成功地构造出Product对象,指挥者就可以让该具体生产器返回所构造的Product对象。(按照步骤组装部件,并返回Product)

namespace ConsoleApp1
{
    public class Computer
    {
        public string Master
        {
            set;
            get;
        }
        public string Screen
        {
            set;
            get;
        }
        public string Keyboard
        {
            set;
            get;
        }
        public string Mouse
        {
            set;
            get;
        }
        public string Audio
        {
            set;
            get;
        }
    }
    //ComputerBuilder类定义构造步骤:
    public abstract class ComputerBuilder
    {
        protected Computer computer;
        public Computer getComputer()
        {
            return computer;
        }
        public void buildComputer()
        {
            computer = new Computer();
            Console.WriteLine("开始生成了一台电脑。");
        }
        public abstract void buildMaster();
        public abstract void buildScreen();
        public abstract void buildKeyboard();
        public abstract void buildMouse();
        public abstract void buildAudio();
    }
    //HPComputerBuilder定义各个组件:
    public class HPComputerBuilder : ComputerBuilder
    {
        public override void buildMaster()
        {
            computer.Master = "i7,16g,512SSD,1060";
            Console.WriteLine("选择主机:" + computer.Master);
        }
        public override void buildScreen()
        {
            computer.Screen = "1080p";
            Console.WriteLine("选择显示屏:" + computer.Screen);
        }
        public override void buildKeyboard()
        {
            computer.Keyboard = "cherry 青轴机械键盘";
            Console.WriteLine("选择键盘:" + computer.Keyboard);
        }
        public override void buildMouse()
        {
            computer.Mouse = "MI 鼠标";
            Console.WriteLine("选择鼠标:" + computer.Mouse);
        }
        public override void buildAudio()
        {
            computer.Audio = "飞利浦 音响";
            Console.WriteLine("选择音响:" + computer.Audio);
        }
    }
    //Director类对组件进行组装并生成产品
    public class Director
    {
        private ComputerBuilder computerBuilder;
        public void setComputerBuilder(ComputerBuilder computerBuilder)
        {
            this.computerBuilder = computerBuilder;
        }
        public Computer getComputer()
        {
            return computerBuilder.getComputer();
        }
        public void constructComputer()
        {
            computerBuilder.buildComputer();
            computerBuilder.buildMaster();
            computerBuilder.buildScreen();
            computerBuilder.buildKeyboard();
            computerBuilder.buildMouse();
            computerBuilder.buildAudio();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Director director = new Director();
            director.setComputerBuilder(new HPComputerBuilder());
            director.constructComputer();
            director.getComputer();
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值