设计模式C#实现(七)——生成器模式

生成器模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

UML类图:

构成:

1.Builder(接口/抽象类)定义了创建一个产品Product的各个部件的方法,返回创建好的产品。

2.Director  调用Builder创建部件的方法,对产品的创建进行控制

3.ConcreteBuilder 实现/重写 Builder的方法,负责创建Product各个部件

4.Product 被创建的对象

以手机为例,在这里Builder使用抽象类提供了,提供了空的方法作为默认的部件创建方法和创建、返回产品两个方法,也可以定义为接口让具体类去实现

abstract class Builder
    {
        public Phone phone { get; private set; }
        virtual public void createPhone() { phone = new Phone(); }
        virtual public void addCPU() { }
        virtual public void addMemory() { }
        virtual public void addScreen() { }
        virtual public Phone getPhone()
        {
            return phone;
        }
    }

一个生成苹果手机的ConcreteBuilder

class AppleBuilder : Builder
    {

        override public void addCPU()
        {
            phone.CPU = "A7";
        }
        override public void addMemory()
        {
            phone.Memory = "1GB";
        }
        override public void addScreen()
        {
            phone.Screen = "LG 5.5\"";
        }

    }

Director负责调用Builder

class Director
    {
        public void createPhone(Builder builder)
        {
            builder.createPhone();
            builder.addCPU();
            builder.addMemory();
            builder.addScreen();
        }
    }

要生成的产品Phone

  class Phone
    {
        public string CPU;
        public string Memory;
        public string Screen;
        public override string ToString()
        {
            return "CPU:"+CPU+"\nMemory:"+Memory+"\nScreen:"+Screen;
        }
    }

执行代码

效果:

1.变更产品,只需定义一个新的ConcreteBuilder

2.Director对产品的构造过程可以精细控制(每个部件创建的先后顺序?还有什么?)

时间: 2024-09-30 12:59:46

设计模式C#实现(七)——生成器模式的相关文章

设计模式学习笔记之生成器模式

生成器模式 封装一个产品的构造过程,并允许按步骤构造. 将一个复杂对象的构建与表示分离,使同样的构造过程可以创建不同的表示. 生成器模式结构中的四种角色: 产品(Product): 所要构建的复杂对象. 抽象生成器(Builder): 抽象生成器是一个接口,该接口除了为创建一个Product对象的各个组件定义若干个方法外,还要定义返回Product对象的方法. 具体生成器(ConcreteBuilder): 实现Buidler接口的类.  指挥者(Director): 指挥者是一个类,该类需含有

设计模式03: Builder 生成器模式(创建型模式)

Builder生成器模式(创建型模式) Builder模式缘起假设创建游戏中的一个房屋House设施,该房屋的构建由几个部分组成,且各个部分富于变化.如果使用最直观的设计方法,每个房屋部分的变化,都将导致房屋构建的重新修正... 动机(Motivation)在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却非常稳定.如何应对这种变化?如何提供一种“封装机制”来隔离

23种设计模式(4)-生成器模式

定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象. 四个要素: Builder:生成器接口,定义创建一个Product对象所需要的各个部件的操作. ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法. Director:指导者,也被称导向者,主要用来使用Build

【设计模式】2、生成器模式(建造者模式)

模式结构: 1 package com.shejimoshi.create.Builder; 2 3 4 /** 5 * 功能:意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 6 * 适用性: 7 * 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时 8 * 当构造过程必须允许被构造的对象有不同的表示时 9 * 时间:2016年2月12日下午4:33:59 10 * 作者:cutter_point 11 */ 12 public abstract

Java设计模式菜鸟系列(七)命令模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39804057 命令模式(Command):将"请求"(命令/口令)封装成一个对象,以便使用不同的请求.队列或者日志来参数化其对象.命令模式也支持撤销操作.命令模式的目的就是达到命令的发出者和执行者之间解耦,实现请求和执行分开. 一.uml建模 二.代码实现: /** * 示例:以咱去餐馆吃饭为例,分为3步 * * 1.和小二说,来个宫保鸡丁 --> 顾客发出口令 * *

[设计模式]<2>. C++与生成器模式(Builder pattern)

原文地址: http://www.cnblogs.com/hebaichuanyeah/p/5585957.html 当构建一个复杂对象时,将构建过程与表示分离.使得同样的过程创建不同的对象. 简单例子,构建produce类,需要构建三个部分part1,part2,part3.通过build类去构建它们,并返回.通过director 类调用build对象进行配置. C++代码 #include <iostream> using namespace std; class Produce { pu

C#设计模式之十九策略模式(Stragety Pattern)【行为型】

原文:C#设计模式之十九策略模式(Stragety Pattern)[行为型] 一.引言 今天我们开始讲"行为型"设计模式的第七个模式,该模式是[策略模式],英文名称是:Stragety Pattern.在现实生活中,策略模式的例子也非常常见,例如,在一个公司中,会有各种工作人员,比如:有的是普通员工,有的是软件架构师,有的是部门经理,当然也会有公司的CEO.这些工作人员负责的工作不同,担负的责任不同,自然得到的报酬也就不同了.每种工作人员都有自己的工资,但是每个工种的工作人员的工资的

C#设计模式之十二代理模式(Proxy Pattern)【结构型】

原文:C#设计模式之十二代理模式(Proxy Pattern)[结构型] 一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字上来看看."代理"可以理解为"代替",代替"主人"做一些事情,为什么需要"代理",是因为某些原因(比如:安全方面的原因),不想让"主人"直接

iOS设计模式——生成器模式

选择建造自己的房子的人会把工程外包给承包商.单一承包商不能建造整个房子,他将其分解为几个部分,然后转包给几个实际的建筑商,他们懂得如何将零部件组装起来.房子由由风格.颜色和尺寸各不相同的部件组成.客户告诉承包商房子里都要有什么,然后承包商协调各房屋建筑商,决定需要做什么.应该如何建造,建筑商就如何施工.建房子是个复杂过程,单凭一双手就想建房子,即便可能也非常困难.如果承包商(指导者)与懂得如何建造的建筑商相互协调,这一过程简单得多且更易管理. 有时,构建某些对象有多种不同方式.如果这些逻辑包含在