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)的更多相关文章

  1. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  2. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  3. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  4. 建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...

  5. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

  6. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  7. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  8. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

  9. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  10. 设计模式 - 建造者模式 Builder Pattern

    简介 场景 在创建复杂对象时,用户无须关心该对象所包含的属性以及它们的组装方式,只需要指定复杂对象的类型和内容就可以构建它们. 模式定义 建造者模式:将一个复杂对象的构建与表示分离,使得同样的构建过程 ...

随机推荐

  1. 优秀大数据GitHub项目一览

    http://blog.csdn.net/yaoxtao/article/details/50540485 优秀大数据GitHub项目一览 VMware CEO Pat Gelsinger曾说: 数据 ...

  2. NSThread - (void)start vs java Thread implements Runnable

    This method spawns the new thread and invokes the receiver’s main method on the new thread. If you i ...

  3. [Winform]一个简单的账户管理工具

    最近一直觉得注册的账户越来越多,帐号密码神马的容易弄混.自己就折腾了一个简单的账户管理工具,其实实现也挺简单,将每个账户的密码及相关密码提示信息,经aes算法加密之后保存到数据库,当前登录用户可以查询 ...

  4. HDU4887_Endless Punishment_BSGS+矩阵快速幂+哈希表

    2014多校第一题,当时几百个人交没人过,我也暴力交了几发,果然不行. 比完了去学习了BSGS才懂! 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4887 ...

  5. form表单那点事儿(下) 进阶篇

    form表单那点事儿(下) 进阶篇 上一篇主要温习了一下form表单的属性和表单元素,这一片主要讲解用JavaScript如何操作form. 目录: 表单操作 取值 赋值 重置 校验 提交 技巧 不提 ...

  6. 移动端富文本编辑器artEditor

    摘要: 由于手机上打字比较慢,并不适合长篇大论的文章,所以移动端的富文本编辑器很少.artEditor是一款基于jQuery的移动端富文本编辑器,支持插入图片,后续完善其他功能. 插件地址:https ...

  7. php设置cookie,在js中如何获取

    在php中设置cookie. $email="abc@163.com"; setcookie("y_email",$email,time()+3600,&quo ...

  8. 微信公开课发布微信官方教程:教你用好微信JS-SDK接口

    微信公众平台开放JS-SDK(微信内网页开发工具包),说明文档已经有相关使用方法和示例了,很多同学觉得不是很直观,为此微信公开课发布微信官方教程:教你用好微信JS-SDK接口. 1.分享类接口:支持获 ...

  9. Activity切换后,如i何保存上一个Activit的状态

    在Activity切换中一般有三种方式保存上一个Activity的状态数据.一.全局变量    public static int type = 0;二.SharedPreference      保 ...

  10. Unity 利用NGUI做屏幕分辨率适配+学习UIDraggablePanel的使用

    原地址:http://blog.sina.com.cn/s/blog_697b1b8c0101g2r4.html 大家使用unity,一定有看中其跨平台的强大功能,因此也难免会遇到不同屏幕分辨率适配的 ...