设计模式学习(五) ------ 生成器模式

设计模式学习(五) —— 生成器模式

简介

生成器模式,有的书上也翻译成建造者模式,是一种意图将一个复杂的构建过程与其表示相分离,使得同样的构建过程可以创建不同的表示形式,也就是说,这个复杂对象的组成过程相对来说是比较固定的,但是组成它的元素可能是变化的。拿我们熟悉的电脑来举例,建造电脑的过程中,装主板、显卡、内存等过程都是必要的,但是这些元件都可以换用不同厂商的产品。根据OOD设计原则之OCP原则(开闭原则),我们应该对这个组装过程进行封装。

一个例子

我们以去电脑城购买组装电脑的过程来说明生成者模式。
在电脑城中有许许多多的电脑组装店,作为消费者,我们首先要找到电脑店的老板,说明我们要什么样的电脑。但是一般来说,老板都不会亲自为你装配电脑,而是交给手下的人员来做。那么在这个例子中,老板就是生成者模式中的指挥者,他的手下就是生成者模式中的建造者。

public class Custome
{
    static void Main(string[] args)
    {
        Boss boss = new Boss();
        Stuff xiaoli = new StuffOne();
        Stuff xiaowang = new StuffTwo();

        boss.ConstructComputer(xiaoli);

        Computer computer_one = xiaoli.GetComputer();
        computer_one.PrintInfo();

        Computer computer_two = xiaowang.GetComputer();
        computer_two.PrintInfo();

        Console.Read();
    }
}


class Boss()
{
    public void ConstructComputer(Stuff s)
    {
        s.BuildMainBoard();
        s.BuildMemory();
        s.BuildDisplay();
        s.BuildHardDrive();
    }
}


class Computer
{
    private string _mainboard;
    private string _memory;
    private string _display;
    private string _harddrive;


    public string MainBoard
    {
        get;set;
    }
    public string Memory
    {
        get;set;
    }
    public string Display
    {
        get;
        set;
    }

    public string HardDrive
    {
        get;
        set;
    }

    public void PrintInfo()
    {
        Console.WriteLine("电脑信息:主板{0},内存{1},显示器{2},硬盘{3}",_mainboard,_memory,_display,_harddrive);
    }
}

public abstract Stuff
{
    public abstract void BuildDisplay();
    public abstract void BuildMemory();
    public abstract void BuildHardDrive();
    public abstract void BuildMainBoard();
}


class StuffOne:Stuff
{
    Computer computer = new Computer();


    public override void BuildMainBoard()
    {
        computer.MainBoard = "技嘉";
    }
    public override void BuildMemory()
    {
        computer.Memory = "三星";
    }
    public override void BuildDisplay()
    {
        computer.Display = "戴尔";
    }
    public override void BuildHardDrive()
    {
        computer.HardDrive = "西数";
    }

    public Computer GetComputer()
    {
        return computer;
    }
}


public class StuffTwo:Stuff
{
    Computer computer = new Computer();
    public override void BuildDisplay()
    {
        computer.Display = "三星";
    }
    public override void BuildMemory()
    {
        computer.Memory = "海力士";
    }
    public override void BuildMainBoard()
    {
        computer.MainBoard = "华硕";
    }
    public override void BuildHardDrive()
    {
        computer.HardDrive = "东芝";
    }


    public Computer GetComputer()
    {
        return computer;
    }
}

生成者模式的分析

  1. 生成器允许改变生成的产品的内部表示,并且隐藏了产品组装的过程。在本例中,顾客并不关心电脑是怎么组装起来的,店员也不向顾客展示组装的过程。
  2. 每个特定的生成器都独立于其他生成器和程序的其他部分。在本例中,假设又来了一名顾客,那么只需要再new 一个新的stuf子类对象。
  3. 因为每个生成器都是根据数据来逐步组装产品的,所以对于构造的整个过程可以进行更多的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值