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

四.案例分析(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 ),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值