5.建造者模式(Builder Pattern)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Test
{
/// <summary>
/// 提供一种封装机制来隔离出构成复杂对象的各个子对象的变化,从而保持系统中的相对稳定的将这些子对象组合在一起的算法不随着需求的改变而改变。
/// 指挥者(Director),建造者(Builder),具体建造者(ConcreteBuilder),产品(Product)
/// 产品:需要创建的对象产品
/// 具体建造者:创建产品的实例并且实现建造者多个方法对产品进行装配
/// 建造者:本质为抽象类,里面的抽象方法供具体建造者重写,声明产品的引用
/// 指挥者:调用建造者抽象类以及其方法
/// </summary>
class Program
{
static void Main(string[] args)
{
//指挥者
CreateDirector _CreateDirector = new CreateDirector();
//建造者
AppleConcreteBuilder _AppleConcreteBuilder = new AppleConcreteBuilder();
_CreateDirector.CreateComputer(_AppleConcreteBuilder);
_AppleConcreteBuilder.ComputerInstance.ShowComputerInfo();
Console.ReadLine();
}
} class Computer
{
private string m_CompName;
private string m_MemorySize;
private string m_DiskSize; /// <summary>
/// 电脑名称
/// </summary>
public string CompName
{
get { return m_CompName; }
set { m_CompName = value; }
} /// <summary>
/// 内存大小
/// </summary>
public string MemorySize
{
get { return m_MemorySize; }
set { m_MemorySize = value; }
} /// <summary>
/// 硬盘大小
/// </summary>
public string DiskSize
{
get { return m_DiskSize; }
set { m_DiskSize = value; }
}
/// <summary>
/// 显示产品的信息
/// </summary>
public void ShowComputerInfo()
{
Console.WriteLine("------------------------");
Console.WriteLine("电脑名称:" + CompName);
Console.WriteLine("内存大小:" + MemorySize);
Console.WriteLine("硬盘大小:" + DiskSize);
}
} //建造者 定义建造产品的抽象方法和产品的引用
abstract class ComputerBuilder
{
private Computer computerInstance; /// <summary>
/// 返回建立的电脑产品实例
/// </summary>
public Computer ComputerInstance
{
get { return computerInstance; }
set { computerInstance = value; }
} /// <summary>
/// 创建电脑名称
/// </summary>
abstract public void CreateCompName(); /// <summary>
/// 创建电脑内存
/// </summary>
abstract public void CreateCompMemory(); /// <summary>
/// 创建电脑硬盘
/// </summary>
abstract public void CreateCompDisk(); } //具体建造者创建苹果电脑
class AppleConcreteBuilder : ComputerBuilder
{
public override void CreateCompName()
{
ComputerInstance = new Computer();
ComputerInstance.CompName = "苹果电脑";
} public override void CreateCompMemory()
{
ComputerInstance.MemorySize = "4G";
} public override void CreateCompDisk()
{
ComputerInstance.DiskSize = "500G";
}
} //具体建造者创建戴尔电脑
class DellConcreteBuilder : ComputerBuilder
{ public override void CreateCompName()
{
ComputerInstance = new Computer();
ComputerInstance.CompName = "戴尔电脑";
} public override void CreateCompMemory()
{
ComputerInstance.MemorySize = "2GB";
} public override void CreateCompDisk()
{
ComputerInstance.DiskSize = "320GB";
}
} //具体建造者创建惠普电脑
class HpConcreteBuilder : ComputerBuilder
{ public override void CreateCompName()
{
ComputerInstance = new Computer();
ComputerInstance.CompName = "惠普电脑";
} public override void CreateCompMemory()
{
ComputerInstance.MemorySize = "1GB";
} public override void CreateCompDisk()
{
ComputerInstance.DiskSize = "160GB";
}
} //具体建造者创建IBM电脑
class IBMConcreteBuilder : ComputerBuilder
{ public override void CreateCompName()
{
ComputerInstance = new Computer();
ComputerInstance.CompName = "IBM电脑";
} public override void CreateCompMemory()
{
ComputerInstance.MemorySize = "2G";
} public override void CreateCompDisk()
{
ComputerInstance.DiskSize = "1000G";
}
} //指挥者
class CreateDirector
{
/// <summary>
/// 调用建造者抽象方法以生产产品
/// </summary>
/// <param name="compBuilder"></param>
public void CreateComputer(ComputerBuilder compBuilder)
{
compBuilder.CreateCompName();
compBuilder.CreateCompMemory();
compBuilder.CreateCompDisk();
}
}
}
5.建造者模式(Builder Pattern)的更多相关文章
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- 建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
- Python 设计模式之建造者模式 Builder Pattern
#引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...
- 设计模式 - 建造者模式 Builder Pattern
简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...
随机推荐
- json(2)
JSON 语法规则 JSON 语法是 JavaScript 对象表示法语法的子集. 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON 名称/值对 JSON 数据的书写格式是 ...
- 用过SQL语句获取织梦DedeCMS每个栏目各有多少文章
我对SQL语句不是很精通,这个SQL调用语句是我在一个模板里面看到了,特来和大家分享,大家在制作模板的过程中有需要可以用得到. 显示效果: 共有会员:31 名 本月更新:39 ...
- Graphtree--zabbix增强功能(一屏展示所有内容)
Graphtree--zabbix增强功能 Graphtree由OneOaaS开发并开源出来. 功能 集中展示所有分组设备 集中展示一个分组图像 集中展示一个设备图像 展示设备下的Applicatio ...
- 详细解析Java中抽象类和接口的区别
在Java语言中, abstract class 和interface 是支持抽象类定 义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和in ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- 详述Linux ftp命令的使用方法
转自:http://os.51cto.com/art/201003/186325.htm ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里 ...
- 设置dom元素可拖动,支持ie5+
摘要: 最近在项目中要做一个图片预览的功能,这时候会遇到用户上传很大的图片,已经超出视图界面.最终决定做一个在固定宽和高的位置,用户可以拖动图片查看.所以自己就写了一个支持ie5+,chrome,Fi ...
- HDOJ 1083 Courses
Hopcroft-Karp算法模板 Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- 批量删除wordpress垃圾评论留言
wordpress博客的存在,垃圾评论注定会找上门来.大家还可以用Akismet.Bad Behavior.Spam Karma等一些其他的插件或者直接用程序写个验证码函数对留言进行验证来过滤 垃圾评 ...
- CocoStudio基础教程(2)关联程序逻辑与cocoStudio导出文件
1.概述 上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有.这篇中我们把它们加进去,这样就可以算一个完整的程序了. 2.界面编辑 大部分 ...