四.案例分析(Example)

1、场景

假设房子只有房顶和墙(Roof And Walls)<?XML:NAMESPACE PREFIX = O />
Jane和 Joe两个客户需要从建造商Bob那里买房子。Jane需要1个房顶(Roof)和4面墙(Walls)的房子,Joe需要1个房顶(Roof)和7面墙(Walls)的房子。建造商需要通过建造者模式实现客户的个性要求。
此时建造商Bob(Contractor)就是指挥者(Director),TownHomeSubContractor和SingleFamilySubContractor就是建造者类(Builder Class),房子就是产品(House is Product).如下图所示
<?XML:NAMESPACE PREFIX = V />
House:House  is Pruduct
Contractor,指挥者
MakeHouse()方法,指挥房子建造过程。
ISubConstractor接口,建造者接口,
AddRoof().添加房顶方法
AddWalls(),添加墙的方法
GetHouse(),获得构建好的房子方法。
TownHomeSubContractor,具体的建造者,实现建造者接口方法。
建造一个房顶和四面墙,以满足Jane 的要求。
SingleFamilySubContractor,具体的建造者,实现建造者接口方法。
建造一个房顶和七面墙,以满足Joe的要求。

2、代码

1、产品House
public class House
{
    public string Roof { get; set; }
    public string Walls { get; set; }
}
2、指挥者类Contractor
public class Contractor
{
    public void MakeHouse(ISubContractor contractor)
    {
        contractor.AddRoof();
        contractor.AddWalls();
    }
}
3、抽象建造者ISubContractor及其具体建造者TownHomeSubContractor,SingleFamilySubContractor
//Sub Contractor interface (IBuilder)  
    public interface ISubContractor
    {
        void AddRoof();
        void AddWalls();
        House GetHouse();
    }
    //Concrete Builder Classes  
    public class TownHomeSubContractor : ISubContractor
    {
        private House _house = new House();
        public void AddRoof()
        {
            _house.Roof = "Adding a small roof";
        }
        public void AddWalls()
        {
            _house.Walls = "Adding 4 Walls";
        }
        public House GetHouse()
        {
            return _house;
        }
    }
    public class SingleFamilySubContractor : ISubContractor
    {
        private House _house = new House();
        public void AddRoof()
        {
            _house.Roof = "Adding a large roof";
        }
        public void AddWalls()
        {
            _house.Walls = "Adding 7 Walls";
        }
        public House GetHouse()
        {
            return _house;
        }
   }
4、客户端代码
static void <?XML:NAMESPACE PREFIX = ST1 />Main(string[] args)
{
    //Jane wants a Town Home  
    Console.WriteLine("Building a Town Home for Jane..");
    Contractor contractor = new Contractor();
    ISubContractor subContractorTownHome = new TownHomeSubContractor();
    contractor.MakeHouse(subContractorTownHome);
    House townHome = subContractorTownHome.GetHouse();
    Console.WriteLine(townHome.Roof + "..");
    Console.WriteLine(townHome.Walls + "..");
    //Joe wants a Single Family Home  
    Console.WriteLine("\nBuilding a Town Home for Joe..");
    ISubContractor subContractorSingleFamily = new SingleFamilySubContractor();
    contractor.MakeHouse(subContractorSingleFamily);
    House singleFamilyHouse = subContractorSingleFamily.GetHouse();
    Console.WriteLine(singleFamilyHouse.Roof + "..");
    Console.WriteLine(singleFamilyHouse.Walls + "..");
}

 

3、程序运行结果

五、总结(Summary)

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。

转载于:https://blog.51cto.com/smartlife/262825

Net设计模式实例之建造者模式(Builder Pattern)(2)相关推荐

  1. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

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

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

  3. UE4 C++设计模式:建造者模式(Builder Pattern)

    目录 描述 套路 使用场景 优缺点 UE4实践 具体复杂产品-门派角色 抽象建造者-角色构造器 具体建造者-纯阳角色构造器 具体建造者-七秀角色构造器 创建指挥者(Director)-角色创建指挥器 ...

  4. 大厦设计师 -- 建造者模式 (Builder Pattern) 介绍 使用案例场景分析 优缺点 及代码演示

    一句话概括: 使用多个简单对象一步一步构建成复杂对象,将复杂对象的构建与表示相分离. 补充介绍: 建造者模式(Builder Pattern)中有一个 Builder 类,这个类会一步一步构造最终的对 ...

  5. Net设计模式实例之桥接模式( Bridge Pattern)(4)

    3.客户端代码<?XML:NAMESPACE PREFIX = O /> static void <?XML:NAMESPACE PREFIX = ST2 />Main(str ...

  6. Net设计模式实例之备忘录模式(Memento Pattern)

    一.备忘录模式简介(Brief Introduction) 备忘录模式(Memento Pattern),在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以就该对 ...

  7. Net设计模式实例之桥接模式( Bridge Pattern)(2)

    四.桥接模式实例分析(Example) 1.场景 业务对象(BusinessObject)与数据对象(DataObject)分离,即业务对象CustormerBase与数据对象DataObject分离 ...

  8. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  9. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

最新文章

  1. Node.js获取mac网卡地址
  2. android 检查网络连接状态实现步骤
  3. nginx指定配置文件启动
  4. ECCV 2020 《Propagating Over Phrase Relations for One-Stage Visual Grounding》论文笔记
  5. mysql ondumplictcate_4.5万字手把手教你实现MySQL TB级数据存储!!
  6. mysql导入表error 1067_mysql 导入数据error 1067(42000) Invalid default value for 'update'
  7. ionic2.x 手动搭建开发环境教程分享(nodejs,jdk,ant,androidsdk)
  8. 利用rsync+inotify搭建实时同步系统
  9. could not insert:
  10. 遗传算法是一种进化算法_一种算法的少量更改可以减少种族主义的借贷
  11. ADS仿真设计AB类射频功率放大器
  12. Spring学习(全)
  13. android layoutinflater原理分析,Android 之 LayoutInflater 全面解析
  14. 关于WPF你应该知道的2000件事
  15. pytorch to_device遇到数据迁移不成功的问题
  16. increment java_Java LongAdder increment()用法及代码示例
  17. 重新启动oracle 服务,在linux重新启动下如何设置oracle服务自动开启
  18. DebugView 简单使用
  19. pcd,obj,mtl文件格式解析
  20. numpy中,矩阵的三种转置transpose、getT、getH的区别

热门文章

  1. SpringCloud微服务注册中心如何承载大型系统的千万级访问?源码及原理分析
  2. 子组件跟随父组件re-render
  3. STL——vector
  4. 几个常用的数据库连接字符串
  5. Netty3架构解析
  6. 最近对python颇有兴趣
  7. Windows Server 8 Beta 初体验之三 Active Directory
  8. 为私有Kubernetes集群创建LoadBalancer服务
  9. VR医疗|全球首例“换头手术”成功了么?
  10. iSCSI原理和实现