设计模式学习总结(五)创建者模式(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设计模式学习记录-中介者模式
前言 中介者模式听名字就能想到也是一种为了解决耦合度的设计模式,其实中介者模式在结构上与观察者.命令模式十分相像:而应用目的又与结构模式“门面模式”有些相似.但区别于命令模式的是大多数中介者角色对于客 ...
随机推荐
- bootstrap页面效果图
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- cad转shapefile文件
private ESRI.ArcGIS.Controls.AxTOCControl axTOCControl1; private ESRI.ArcGIS.Controls.AxLicenseContr ...
- 编写高质量代码改善C#程序的157个建议——建议48:Dispose方法应允许被多次调用
建议48:Dispose方法应允许被多次调用 一个类型的Dispose方法应该允许被多次调用而不抛出异常.鉴于此,类型内部维护了一个私有的bool变量disposed,如下: private bool ...
- 树形DP-----HDU4003 Find Metal Mineral
Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Other ...
- 并发编程学习笔记之Java存储模型(十三)
概述 Java存储模型(JMM),安全发布.规约,同步策略等等的安全性得益于JMM,在你理解了为什么这些机制会如此工作后,可以更容易有效地使用它们. 1. 什么是存储模型,要它何用. 如果缺少同步,就 ...
- go语言 defer 你不知道的秘密!
go 语言的defer功能强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.我们先来看几个例子. 例一: defer 是先进后出 这个很自然,后面的语句会依赖前面的资源,因此如果先前面的资源先 ...
- IO模型《一》IO模型介绍
IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...
- Kubernetes -- Server 部署
1. Node 节点配置文件 1.1 下载相关的软件 wget https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz wget ...
- Unity---动画系统学习(3)---使用状态机来实现走、跑、转弯等的动画切换
1. 初始设置 用动画学习笔记(2)中方法,把动画全都切割好. 拖进状态机并设置箭头.并设置具体箭头触发的事件. 在状态机左侧中添加参数,Float和Int类型参数只能从-1~1之间变化 Float: ...
- Trie树【洛谷P3879】 [TJOI2010]阅读理解
P3879 [TJOI2010]阅读理解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输入输出 ...