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

  一、示例展示:

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

  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. 二度xml<一>

    又一次学习Xml,之前差不多都忘了,为了下半年的面试,为了工作重头来过....... 其实我觉得直接上代码来的更实际点,理论的东西,我们随便找点书看看就行. 下面的代码是为了打印出一个xml文件 xm ...

  2. 设计模式05: Prototype 原型模式(创建型模式)

    Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...

  3. python -Tkinter 实现一个小计算器功能

    文章来源:http://www.cnblogs.com/Skyyj/p/6618739.html 本代码是基于python 2.7的 如果是对于python3.X  则需要将 tkinter 改为Tk ...

  4. Fragment生命周期及在viewpager中的生命周期

    简介 本篇博客主要从一下三个方面介绍fragement的生命周期 1.fragment的生命周期及与Activity的生命周期的比较 2.FrameLayou布局添加.替换Fragment时fragm ...

  5. 关于hibernate的查询

    为什么建议hibernate查询全部字段 一般而言,要查询什么字段就查询什么字段,不要select * from表,但是在hibernate,我们其实可以不遵循这个规则,建议我们把所有属性都查询出来( ...

  6. HackSix 为ViewGroup的子视图添加悦目的动画效果

    1.默认情况下他,添加到viewGrop的子视图是直接显示出来的.有一个比较简单的方法可以为这个过程增加动画效果. 2.知识点:     给子视图添加动画效果就用:LayoutAnimationCon ...

  7. 打包发布到NPM并通过CDN访问

    本文主要讲述基于webpack编写js包文件后上传到npm,并通过cdn进行访问. 创建项目 在自己新建的文件夹下执行如下代码: npm init name: (mtmap) version: (1. ...

  8. 《Thinking in Java》 10~

    chapter 10 内部类(P191) 创建内部类 链接到外部类 内部类能访问器外围对象的所有成员,而不需要任何特殊条件. 使用.this与.new package cn.test; public ...

  9. lower_bound下确界

    //lower_bound用于找到首个大于等于某个值的元素 #include<algorithm> #include<iostream> using namespace std ...

  10. mybatis 学习笔记(一):mybatis 初认识

    mybatis 学习笔记(一):mybatis 初认识 简介 MyBatis是一个Java持久层框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来.mybatis 可以将 prepar ...