设计模式学习总结(五)创建者模式(Builder)
创建者模式,主要针对某些产品有类似的生产步骤,且有需要有先后顺序的进行各个部件的生成。
一、示例展示:
通过学习及总结,以下是我完成的创建者模式的示例:
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)的更多相关文章
- 设计模式学习系列6 原型模式(prototype)
原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可. 1 ...
- [设计模式] 3 创建者模式 builder
转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...
- C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】
一.引言 今天我们开始讲“行为型”设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看.“迭代器模式”我第一次看到这个名称,我的理解 ...
- 创建者模式Builder
创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...
- 创建者模式-Builder
创建者模式使用多个简单的对象一步一步构建成一个复杂的对象.它提供了一种创建对象的最佳方式.一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的. 一.类图 创建者 ...
- Java设计模式学习记录-享元模式
前言 享元模式也是一种结构型模式,这篇是介绍结构型模式的最后一篇了(因为代理模式很早之前就已经写过了).享元模式采用一个共享来避免大量拥有相同内容对象的开销.这种开销最常见.最直观的就是内存损耗. 享 ...
- 设计模式学习笔记--备忘录(Mamento)模式
写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...
- Java设计模式学习笔记(五) 单例模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...
- Java设计模式学习记录-中介者模式
前言 中介者模式听名字就能想到也是一种为了解决耦合度的设计模式,其实中介者模式在结构上与观察者.命令模式十分相像:而应用目的又与结构模式“门面模式”有些相似.但区别于命令模式的是大多数中介者角色对于客 ...
随机推荐
- 僵固式思维 OR 成长式思维
有意无意中,看到这样的一篇文章,觉得非常富有正能量,而且也比较有同感.而且,不仅仅对于职场暂时失落或者失意的人有帮助,就是对学生,也一样的.故特分享,以共勉之. 我想每个新人进入职场之后都会遇到的第一 ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(3):常用动态代理之JDK动态代理、CGLIB动态代理
一.动态代理的理解 动态代理的意义在于生成一个占位(又称代理对象),来代理真实对象,从而控制真实对象的访问. 先来谈谈什么是代理模式. 假设这样一个场景:你的公司是一家软件 ...
- 分组背包----HDU1712 ACboy needs your help
很简单的一道分组背包入门问题.不多解释了. #include <iostream> #include <cstdio> #include <cstring> usi ...
- [web] [vscode] 自定义语言缩进
vscode 默认的html 语言的缩进有点过,貌似一个tab6个space, html看起来太空了,所幸的是可以自己调整单个语言的缩进模式. 方法如下 Preferences: Open User ...
- 【C#】LINQ
一.什么是LINQ 长期以来,开发社区形成以下的格局: 1.面向对象与数据访问两个领域长期分裂,各自为政. 2.编程语言中的数据类型与数据库中的数据类型形成两套不同的体系,例如: C#中字符串用str ...
- Autofac的Autofac.Core.Activators.Reflection.DefaultConstructorFinder错误解决方案。
在使用Autofac的时候,不给力,看着例子来的,人家没问题,我就报了Autofac.Core.Activators.Reflection.DefaultConstructorFinder错误. 百般 ...
- 【大数据系统架构师】0.2 Linux基础
1. Linux基本环境 1.1 大数据Hadoop前置大纲讲解 1)Linux系统,基本命令 2)Java语言,JavaSE相关知识 3)MySQL基本的DML和DDL 1.2 常见Linux系统. ...
- 【bzoj4514】: [Sdoi2016]数字配对 图论-费用流
[bzoj4514]: [Sdoi2016]数字配对 好像正常的做法是建二分图? 我的是拆点然后 S->i cap=b[i] cost=0 i'->T cap=b[i] cost=0 然后 ...
- 1.线性回归、Logistic回归、Softmax回归
本次回归章节的思维导图版总结已经总结完毕,但自我感觉不甚理想.不知道是模型太简单还是由于自己本身的原因,总结出来的东西感觉很少,好像知识点都覆盖上了,但乍一看,好像又什么都没有.不管怎样,算是一次尝试 ...
- python创建virtualenv虚拟环境
pip install virtualenv virtualenv env_py36_crawl env_py36_crawl\Scripts\activate deactivate pip free ...