创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成。

  一、示例展示:

  通过学习及总结,以下是我完成的创建者模式的示例:

  1.创建产品类:Laptop

public class Laptop
{
ArrayList LaptopParts = new ArrayList();
public void AddParts(string PartName)
{
LaptopParts.Add(PartName);
} public void ShowPartList()
{
foreach (string part in LaptopParts)
{
Console.WriteLine(part);
}
}
}

  2. 创建抽象创建者角色:AbstractBuilder

public abstract class AbstractBuilder
{
public abstract void CreateCPU();
public abstract void CreateScreen();
public abstract void CreateKeyboard();
public abstract Laptop GetLaptop();
}

  3. 创建具体创建者角色:AppleLaptopBuilder

public class AppleLaptopBuilder : AbstractBuilder
{
private Laptop laptop = new Laptop();
public override void CreateCPU()
{
laptop.AddParts("Apple CPU is very fast!");
} public override void CreateKeyboard()
{
laptop.AddParts("The experience of apple Keyboard is wouderful!");
} public override void CreateScreen()
{
laptop.AddParts("The experience of apple screen is really amazing!");
} public override Laptop GetLaptop()
{
return laptop;
}
}

  4. 创建具体创建者角色:LenovoLaptopBuilder

public class LenovoLaptopBuilder : AbstractBuilder
{
private Laptop laptop = new Laptop();
public override void CreateCPU()
{
laptop.AddParts("Lenovo CPU is very good!");
} public override void CreateKeyboard()
{
laptop.AddParts("Lenovo Keyboard looks amazing!");
} public override void CreateScreen()
{
laptop.AddParts("Lenovo screen is wounderful!");
} public override Laptop GetLaptop()
{
return laptop;
}
}

  5. 创建指导者角色:Director

public class Director
{
public void Construct(AbstractBuilder builder)
{
builder.CreateCPU();
builder.CreateKeyboard();
builder.CreateScreen();
builder.GetLaptop();
}
}

  6. 定义客户端调用:

class Program
{
static void Main(string[] args)
{
Director director = new Director(); AppleLaptopBuilder alBuilder = new AppleLaptopBuilder();
director.Construct(alBuilder);
Laptop AppLaptop = alBuilder.GetLaptop();
AppLaptop.ShowPartList(); LenovoLaptopBuilder llBuilder = new LenovoLaptopBuilder();
director.Construct(llBuilder);
Laptop LnLaptop = llBuilder.GetLaptop();
LnLaptop.ShowPartList();
Console.ReadLine();
}
}

  二、创建者模式设计理念:

  通过抽象创建者角色来限制及规范产品的结构,且针对产品的每个部件都需要相应的建构方法。具体的创建者角色负责创建产品的实例,在这个过程中间,指导者的角色负责创建产品的实例的具体步骤(可以随产品的具体创建步骤而增加或减少)。

  三、角色及关系:

  

设计模式学习总结(五)创建者模式(Builder)的更多相关文章

  1. 设计模式学习系列6 原型模式(prototype)

    原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可. 1 ...

  2. [设计模式] 3 创建者模式 builder

    转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  3. C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看.“迭代器模式”我第一次看到这个名称,我的理解 ...

  4. 创建者模式Builder

    创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...

  5. 创建者模式-Builder

    创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...

  6. Java设计模式学习记录-享元模式

    前言 享元模式也是一种结构型模式,这篇是介绍结构型模式的最后一篇了(因为代理模式很早之前就已经写过了).享元模式采用一个共享来避免大量拥有相同内容对象的开销.这种开销最常见.最直观的就是内存损耗. 享 ...

  7. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  8. Java设计模式学习笔记(五) 单例模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...

  9. Java设计模式学习记录-中介者模式

    前言 中介者模式听名字就能想到也是一种为了解决耦合度的设计模式,其实中介者模式在结构上与观察者.命令模式十分相像:而应用目的又与结构模式“门面模式”有些相似.但区别于命令模式的是大多数中介者角色对于客 ...

随机推荐

  1. c#并发编程经典实例文摘

    第1章 并发编程概述 1.1 并发编程简介 并发: 多线程(包括并行处理) 异步编程(异步操作)程序启动一个操作,而该操作将会在一段时间后完成 响应时编程(异步事件)可以没有一个实际的开始,可以在任何 ...

  2. [GO]数组指针做函数参数

    package main import "fmt" //p指向实现数组a,它是指向数组,它是数组指针//*p指向指针指向的内存,就是实参a func modify1(p *[]in ...

  3. C++函数后面加throw关键字简记

    看代码时候看到fun() throw()的用法,找到一篇blog解释很简单,如下: C++函数后面加关键字throw(something)限制,是对这个函数的异常安全性作出限制. 举例及解释如下: v ...

  4. jQuery事件(持续更新中)

    方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 cli ...

  5. javascript webstorm用法

    javascript  webstorm用法 一.什么是webstorm?       WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“We ...

  6. 「BZOJ1000」A+B Problem

    写这个主要是为了凑\(BZOJ\)题解用的,不用在意.跳过即可 \(Code\) #include<bits/stdc++.h> using namespace std; int main ...

  7. linux系统安全及应用——端口扫描

    NMAP是一款强大的网络扫描安全监测工具,通过扫描网络中不需要的服务端口来关闭这些服务,提高安全性.官网是http://nmap.org/,linux安装光盘中自带软件nmap-5.51.3.el6. ...

  8. P4854 MloVtry的咸鱼树 状压+最短路

    $ \color{#0066ff}{ 题目描述 }$ 俗话说种瓜得瓜,种豆得豆,MloVtry把自己砍掉一半埋进了土里,于是它得到了一颗n个点的咸鱼树. 但是问题是由于MloVtry只舍得埋下一半的自 ...

  9. php常用的系统函数大全

    字符串函数 strlen:获取字符串长度,字节长度 substr_count 某字符串出现的次数 substr:字符串截取,获取字符串(按照字节进行截取) mb_strlenmb_substr str ...

  10. Svn安装成功后的操作

    一.服务器端创建目录 在Svn服务器端创建一个用来保存客户端提交文件的文件夹 (我的路径是d:/Svn/App/book) 首先将Svn的服务端安装目录/bin 进行环境配置,以下操作是在进行环境配置 ...