建造者模式

上一次学习了工厂模式,这一学习了建造者模式,对于建造者来说,抽象出来的建筑流程是确定的,往往建筑一座楼房包括下面的步骤:(1)打桩,建立基础(2)建立框架等。建造者模式的本质和建造楼房是一致的:即流程不变,但每个流程实现的具体细节则是经常变化的。建造者模式的好处就是保证了流程不会变化,流程即不会增加、也不会遗漏或者产生流程次序错误,这是非常重要的。

这次代码构思如下:

接下来是代码展示:

Client

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
class Client
{
static void Main(string[] args)
{
MealKFCBuilder kfcbuilder = new MealKFCBuilder();
MealDirector kfcdirector = new MealDirector(kfcbuilder);
kfcdirector.CreateMeal().Make();
Console.Read();
}
}
}

definitePart

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
/// <summary>
/// 薯条部分
/// </summary>
class definitePart
{
}

public class KFCChips : part
{
public override void Make()
{
Console.WriteLine("KFC薯条制作完成");
}
}

public class MChips : part
{
public override void Make()
{
Console.WriteLine("麦当劳薯条制作完成");
}
}

public class KFCBuger : part
{
public override void Make()
{
Console.WriteLine("KFC汉堡制作完成");
}
}

public class MBuger : part
{
public override void Make()
{
Console.WriteLine("麦当劳汉堡制作完成");
}
}

public class KFCDrink : part
{
public override void Make()
{
Console.WriteLine("KFC饮料制作完成");
}
}

public class MDrink : part
{
public override void Make()
{
Console.WriteLine("麦当劳饮料制作完成");
}
}
}

 Meal:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{

public class Meal
{
protected List<part> _parts = new List<part>();

public void AddPart(part part)
{
_parts.Add(part);
}

public void Make()
{
foreach (part part in _parts)
{
part.Make();
}
}
}
}

MealBuilder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
public abstract class MealBuilder
{
protected Meal _meal = new Meal();

public abstract void BuildBuger();
public abstract void BuildChips();
public abstract void buildDrink();

public Meal GetMeal()
{
return _meal;
}
}

}

MealDirector:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
public class MealDirector
{
private MealBuilder _mealbuilder;

public MealDirector(MealBuilder mealbuilder)
{
_mealbuilder = mealbuilder;
}

public Meal CreateMeal()
{
_mealbuilder.BuildBuger();
_mealbuilder.BuildChips();
_mealbuilder.buildDrink();

return _mealbuilder.GetMeal();
}
}
}

  MealKFCBuilder:MealBuilder

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
public class MealKFCBuilder:MealBuilder
{
public override void BuildBuger()
{
_meal.AddPart(new KFCBuger());
}

public override void BuildChips()
{
_meal.AddPart(new KFCChips());
}

public override void buildDrink()
{
_meal.AddPart(new KFCDrink());
}

}
}

 MealMBuilder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
public class MealMBuilder:MealBuilder
{
public override void BuildBuger()
{
_meal.AddPart(new MBuger());
}

public override void BuildChips()
{
_meal.AddPart(new MChips());
}

public override void buildDrink()
{
_meal.AddPart(new MDrink());
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 建造者模式作业
{
public abstract class part
{
public abstract void Make();
}
}

通过学习,我明白了:

1.使用建造者模式可以使客户端不必知道产品内部组成的细节。

2.具体的建造者类之间是相互独立的,对系统的扩展非常有利。

3.由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

时间: 2024-10-24 23:03:48

建造者模式的相关文章

大话设计模式---建造者模式

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化. 建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在定义一个具体的建造者就可以了.     建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适应的模式.

5.大话设计模式-代理模式

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignModel { public class Proxy:IAction { ZQZ zzz = null; public Proxy(ZQZ mm) { zzz = mm; } public void SendFlower() { zzz

2.大话设计模式-策略模式

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace DesignModel 8 { 9 /// <summary> 10 /// 策略模式 11 /// </summary> 12 public class TacticsModel 13 { 14 //对于

6.大话设计模式-工厂模式

工厂模式和简单工厂有什么区别.废话不多说,对比第一篇例子应该很清楚能看出来. 优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了封装对象创建过程的优点. using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace DesignModel{    public interface Factory   

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

C++设计模式——建造者模式

建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建,其通常是由很多的子对象构成:如果一个对象能够直接就创建好了,那么也不会称之为复杂对象.由于项目中需求的变化,这个复杂对象的各个部分经常会发生剧烈的变化,但是,不管怎么变化,将它们组合在一起,组成一个复杂的对象的事实是不会变的.建造者模式就提供了一种“封装机制”来将各个对象的变化隔离开,最终,组合成复杂对象的

PHP设计模式——建造者模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪:鸟,他的头.翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式. 类图: 建造者模式一般认为有四个角色: 1.产品角色,产品角色定义自身的组成属性 2.抽象建造者,抽象建造者定义了产品的创建过程以及如何

小菜学设计模式——建造者模式

背景 不要小看炒菜这件小事上,想要上一道佳肴,那是需要循规蹈矩,步步小心的.我相信你肯定在外面吃过没放盐的快餐,吃过放多了盐的快餐.....既然炒菜是一个如此复杂的过程,又必须循规蹈矩,那为什么不给他一个死规定呢?如果谁没有按照规定做事,就进行对应的提醒警告.这就是建造者模式的由来,限制规则步骤,但是开发规则细节.比如说盛菜之前必须放盐,那么规定一定要放盐,具体放多少自己论情况而定. 1.使用意图 如果你需要将一个复杂对象的构建与它的表示(构建具体过)分离,使得同样的构建过程可以创建不同的表示的

设计模式——建造者模式

HeadFirst中并没有把建造者模式(生成器模式)当做常用的设计模式来讲解,只是在附录中一带而过. 建造者模式的本质:       分离了对象组件的单独构造(由Builder来负责)和装配(由Director)来负责.从而可以构建出复杂的对象.这个模式适用于:某个对象的构建       过程复杂的情况先使用.由于实现了构建和装配的解耦.不同的构建器,相同的装配,也可以做出不同的对象相同的构建器不同的装配顺序也可以 做出不同的对象.也就是实现了构建算法.装配算法的解耦,实现了更好的复用. Dem

C#设计模式——建造者模式(Builder Pattern)

1.建造者模式简介 1.1>.定义 建造者模式(Builder)将复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 1.2>.使用频率  中低 1.3>.原型模式应用 在软件系统中,有时候面临一个复杂对象的创建工作,该对象通常由各个部分子对象用一定的算法构成,或者按一定的步骤组合而成:这些算法和步骤是稳定的,而构成这个对象的子对象却经常由于需求的变化而不断变化. 生活中的例子,要组装一台电脑,它的组装过程基本是不变的,都可以由主板.CPU.内存等按照某个稳定方式组合而成.