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

简介:

四.案例分析(Example

1、场景

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

2、代码

1 、产品 House
public  class House
{
    public string Roof { getset; }
    public string Walls { getset; }
}
 
 
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  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 = newSingleFamilySubContractor();
    contractor.MakeHouse(subContractorSingleFamily);
    House singleFamilyHouse = subContractorSingleFamily.GetHouse();
    Console.WriteLine(singleFamilyHouse.Roof + "..");
    Console.WriteLine(singleFamilyHouse.Walls + "..");
}
 

3、程序运行结果

五、总结(Summary

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









本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/262825,如需转载请自行联系原作者

目录
相关文章
|
3月前
|
设计模式 算法
设计模式--建造者模式 builder
这篇文章通过一个电脑购买的例子,详细解释了建造者模式的四个角色(产品类、抽象构建者、实体构建类和指导者类),并提供了相应的代码实现,阐述了建造者模式在设计复杂对象时的应用和优势。
设计模式--建造者模式 builder
|
1月前
|
Java 网络安全 Maven
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
【10月更文挑战第26天】Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.sslSocketFactory(Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/X509TrustManager;)Lokhttp3/OkHttpClient$Builder; 问题处理
43 2
|
1月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
3月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 算法 Java
Java设计模式-建造者模式(6)
Java设计模式-建造者模式(6)
|
3月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 XML 存储
【四】设计模式~~~创建型模式~~~建造者模式(Java)
文章详细介绍了建造者模式(Builder Pattern),这是一种创建型设计模式,用于将复杂对象的构建与其表示分离,允许分步骤创建一个复杂的对象而无需指定其内部的具体构造细节。通过定义抽象建造者、具体建造者、指挥者和产品角色,建造者模式允许通过相同的构建过程创建不同的产品表示,提高了系统的灵活性和扩展性。
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 建造者模式
js设计模式【详解】—— 建造者模式
59 0
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。