建造者

Java设计模式之建造者模式

耗尽温柔 提交于 2020-01-28 00:00:32
建造者设计模式: 使用多个简单的对象一步构建一个复杂的对象,这种类型的设计模式属于创建者模式。 介绍: 意图: 将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决: 有时候面临一个复杂对象的创建工作,其通常由各个部分的子对象使用一定的算法构成,由于需求的改变,这个复杂的对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法去相对稳定。 何时使用: 一些基本不会变,而其组合经常变化的时候。 关键代码: 建造者:创建和提供实例,导演:管理创建出来的实例的依赖关系。 应用实例: 1去肯德基,可乐,汉堡以及鸡翅是不会变化的,但是客户点餐的套餐组合是不一样的。 优点: 1建造者独立,容易扩展。2便于控制细节风险。 缺点: 1产品必须具有共同点,范围有限制。2如果内部变化复杂,会导致有很多建造类。 使用场景: 1需要生成的对象具有复杂的内部结构。2需要生成的对象内部属性本身相互依赖。 注意事项: 与工厂模式不同,建造者模式更加强调零件之间的装配的顺序。 模式角色: 建造者角色:定义生成实例所需要的所有方法。 具体的建造者角色:实现生成实例所需要的所有方法,并且定义获取最终实例的方法。 监工角色:定义使用建造者角色中的方法来生成实例的方法。 使用者:使用建造者模式。 uml图: Product类 import java.util.ArrayList;

【php设计模式】建造者模式

跟風遠走 提交于 2020-01-27 05:43:19
<?php /** *建造者模式特点: * 1.客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。 * 2.每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, *用户使用不同的具体建造者即可得到不同的产品对象 * 3.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式 * *角色: * Product(产品角色):一个具体的产品对象。 * Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口。 * ConcreteBuilder(具体建造者):实现抽象接口,构建和装配各个部件。 * Director(指挥者):构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程, * 二是:负责控制产品对象的生产过程。 * *示例: * 通过建造者模式来创建不同配置的手机,用户购买手机时不需要知道手机是怎么生产出来的只要说自己要低配手机(低配建造者)还是高配手机(高配建造者)然后手机商(指挥者)去获取 * */ class Phone{ public $ram; public $rom; } abstract class

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

孤街浪徒 提交于 2020-01-26 06:54:18
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u010850027/article/details/24629581 盘古开辟了天地。用身躯造出日月星辰、山川草木。那残留在天地间的浊气慢慢化作虫鱼鸟兽,为这寂静的世界增添了生气。这时,有一位女神女娲,在这莽莽的原野上行走。 她放眼四望。山岭起伏,江河奔流,丛林茂密,草木争辉,天上百鸟飞鸣,地上群兽奔驰,水中鱼儿嬉戏,草中虫之豸跳跃,这世界按说也点缀得相当漂亮了。可是她总认为有一种说不出的寂寞。越看越烦,孤寂感越来越强烈,连自己也弄不清楚这是为什么。与山川草木诉说心中的烦躁,山川草木根本不懂她的话;对虫鱼鸟兽倾吐心事,虫鱼鸟兽哪能了解她的苦恼。 她颓然坐在一个池塘旁边,茫然对池塘中自己的影子。 忽然一片树叶飘落池中,精巧的池水泛起了小小的涟漪,使她的影子也微微晃动起来。 她突然认为心头的结解开了,是呀!为什么她会有那种说不出的孤寂感?原来是世界是缺少一种像她一样的生物。想到这儿,她立即用手在池边挖了些泥土。和上水。照着自己的影子捏了起来。捏着捏着,捏成了一个小小的东西,模样与女娲几乎相同,也有五官七窍,双手两脚。捏好后往地上一放。竟然活了起来。 女娲一见,满心欢喜,接着又捏了很多。 她把这些小东西叫作“人”。 今天我们的大话设计就从女娲抟土造人的故事開始说起,女娲要建造一个人

建造者模式(Builder)

喜夏-厌秋 提交于 2020-01-25 09:41:51
建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。 Builder Director Builder是什么?是为Product创建一个对象的各个部件指定的抽象接口, ContreteBuilder:是具体建造者,实现Builder接口,构造和装配各个部件。Product就是具体的对象。 Director是指挥者,构建一个使用builder接口的对象。用于构建一些复杂的对象,这些对象内部构建间的构造顺序通常是稳定的,但对象的构造通常面临着复杂的变化。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DesignPatterns.BuilderPattern.Structural { public class Product { private List<string> _parts = new List<string>(); public void Add(string part) { _parts.Add(part); } public void Show() { Console.WriteLine("Product Parts"); foreach (string part in _parts) {

设计模式(5)---建造者模式

陌路散爱 提交于 2020-01-25 08:47:33
上一篇: 抽象工厂模式 1.什么是建造者模式?    将一个复杂对象的构建和表示分离开,使得同样的构建可以创建不同的表示。 整不明白?    你就想象一下你点外卖的时候有不同的套餐:可乐+炸鸡=套餐A,可乐+薯条=套餐B。套餐A和套餐B是两个不同的表示,它的构建就是可乐、炸鸡、薯条这些子对象,这些子对象是不变的,但是能够通过不同的组合生成不同的套餐。    还没有懂?    造房子!造房子你用的原材料无非就是钢筋、水泥之类的材料(构建子对象),但是最终造出来的房子(表示)却是不一样的。 2.建造者模式的作用?    建造者模式用来隐藏复杂对象的实现细节,将复杂对象的创建进行抽象化,通过子类继承和重载的方式动态创建复杂对象。 3.如何使用建造者模式? 1)定义房子类 /** * 定义 房子类 */ public class House { /** * 钢筋 */ private String rebar ; /** * 水泥 */ private String cement ; public String getRebar ( ) { return rebar ; } public void setRebar ( String rebar ) { this . rebar = rebar ; } public String getCement ( ) { return cement

建造者模式

主宰稳场 提交于 2020-01-24 08:23:01
  玩过data或者lol的应该都知道,每个英雄有很多属性组成,例如血量、魔法量、智力值、敏捷值、力量值,还有4个技能,在没有使用建造者模式时,我们创造一个英雄过程是这样的,调用无参构造创建英雄,然后给英雄设置各个属性,由于属性比较多,并且赋值时可能有先后顺序,所以创建过程非常复杂,万一其中我们忘了给英雄设置一个技能,那么就会产生bug,这当然是不行的,还有就是每次我们去创建一个英雄都要重复上面的工作,这也是相当麻烦的,那么怎么办呢?建造者模式就是为了解决这个问题。   建造者模式定义:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。   建造者模式中有四种角色:   1、Builder:抽象建造者。它声明为创建一个Product对象的各个部件指定的抽象接口。   2、ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。   3、Director:指挥者。构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象,它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。   4、Product:产品角色。一个具体的产品对象。   建造者模式的适用场景是这样的:     1、当对象的构建过程十分复杂,需要与表示分离的时候。   2、当对象的表示有不同种类

建造者模式

天涯浪子 提交于 2020-01-21 09:23:29
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。 我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。 #region 基本接口 interface Item { float price(); string name(); Packing packing(); } //包裹 interface Packing { string pack(); } #endregion #region 包裹类 class Wapper : Packing { public string pack() { return "wapper"; } } class Bottle:Packing { public string pack() { return "bottle"; } } #endregion #region

[设计模式]建造者模式

不想你离开。 提交于 2020-01-17 15:29:07
目录 简介 结构 动机 要点 实例   House (Product角色)   Builder   Worker (ConcreteBuilder角色)   Engineer (Director角色)   Client 推荐阅读 参考资料 简介 建造者模式 (Builder) 将一个复杂对象的 构建 与它的 表示 分离 ,使得同样的构建过程可以创建不同的表示。 建造者模式是一种 对象创建型模式 ( 可参考 设计模式 创建型模式 )。 使用建造者模式,用户就只需要指定需要建造的类型,具体的建造过程和细节并不需要知道。 结构 图-建造者模式结构图 Product : 产品类,由多个部件构成。 class Product { List<String> parts = new ArrayList<String>(); public void AddPart(String part) { parts.add(part); } public void show() { System.out.println("============== 产品创建 =============="); for (String part : parts) { System.out.println(part); } } } Builder : 抽象建造者,确定产品由ABC三个部件构成

设计模式(5)--Builder(建造模式)--创建型

北城以北 提交于 2020-01-17 03:32:09
1.模式定义:   建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 2.模式特点:   (1)产品的内部表象     一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation)。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎么组成产品。   (2)对象性质的建造     有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发送。     有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化

建造者(Builder)模式

試著忘記壹切 提交于 2020-01-16 04:03:33
  建造者模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 产品的内部表象   一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的 内部表象(internal representation) 。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎么组成产品。 对象性质的建造   有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址得到赋值之前,这个电子邮件不能发送。有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。这些情况使得性质本身的建造涉及到复杂的商业逻辑。这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。 由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个称做建造者的对象里