《JAVA与模式》之建造者模式

1.概念

将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]

与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。

消费者最后是通过建造者得到产品而不是通过指导者,另外,消费者无法直接让建造者建造产品,这个可能是建造者跟工厂方法的最大区别

工厂方法是需求者可以直接接触到工厂对象,然后指派其生产。

  建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

工厂方法角色

1.抽象产品

2.具体产品

3.抽象建造者

4.具体建造者

5.指挥者

消费者通过指挥者调动具体的建造者,生产具体产品

举个例子,我要装修房子,我请了一批工人,但是我不是搞设计的,所以我又请了装修公司的人(指挥者),让他们负责调度

工人(建造者),而这些工人是我介绍给指挥者的,最后通过工人的努力,得到我想要的效果(产品),这个产品是工人给你的,而不是设计师

设计师只负责设计,指挥工人而已



先看一个简单的实例

 1 interface Product{
 2
 3     public void part1();
 4     public void part2();
 5     public void part3();
 6
 7 }
 8 class ProductOne implements Product{
 9
10     public void part1() {
11         System.out.println("ProductOne part1");
12     }
13     public void part2() {
14         System.out.println("ProductOne part2");
15     }
16     public void part3() {
17         System.out.println("ProductOne part3");
18     }
19 }
20 class ProductTwo implements Product{
21
22     public void part1() {
23         System.out.println("ProductTwo part1");
24     }
25     public void part2() {
26         System.out.println("ProductTwo part2");
27     }
28     public void part3() {
29         System.out.println("ProductTwo part3");
30     }
31 }
32 interface AbstractBuilder{
33
34     //获得建造好的产品
35     public Product getProduct();
36     //创建产品 好拗口 因为是生产产品 工厂模式?????
37     public void buildProduct();
38 }
39
40 class ProductTwoBuilder implements AbstractBuilder{
41     private Product product=new ProductTwo();
42
43     public void buildProduct() {
44         product.part1();
45         //product.part2();//不是所有的步骤都需要的
46         product.part3();
47     }
48     public Product getProduct() {
49         System.out.println("ProductTwo 生产完毕");
50         return this.product;
51     }
52 }
53 class ProductOneBuilder implements AbstractBuilder{
54     private Product product=new ProductOne();
55     public void buildProduct() {
56         product.part2();
57         product.part3();
58     }
59     public Product getProduct() {
60         System.out.println("ProductOne 生产完毕");
61         return this.product;
62     }
63 }
64 //指挥者 等同于抽象工厂中的 具体工厂
65 class Director {
66     private AbstractBuilder builder;
67     public Director(AbstractBuilder builder){
68
69         this.builder=builder;
70     }
71     public void construct(){
72
73         builder.buildProduct();
74     }
75
76 }

参考地址:
http://www.cnblogs.com/devinzhang/archive/2012/01/06/2314670.html
http://haolloyin.blog.51cto.com/1177454/333155

《JAVA与模式》之建造者模式

时间: 2024-10-10 17:59:37

《JAVA与模式》之建造者模式的相关文章

2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模式.主要就是外观模式.建造者模式和观察者模式.我们从boost简要说起. 事实上boost的库好多东西在c++11里面已经有了.比方bind,仅仅只是boost的库的bind比c++11用着感觉要方便.事实上有些东西我自己由于也没实用c++做过什么大的项目.所以不敢乱说,仅仅敢说点建议性的,关于bi

2015-03-12---外观模式,建造者模式,观察者模式,boost库应用

今天白天主要看了boost库的应用,主要是常用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模式,主要就是外观模式,建造者模式和观察者模式.我们从boost简要说起. 其实boost的库好多东西在c++11里面已经有了,比如bind,只不过boost的库的bind比c++11用着感觉要方便,其实有些东西我自己因为也没有用c++做过什么大的项目,所以不敢乱说,只敢说点建议性的,关于bind就是绑定

创建型模式:建造者模式

个人公众号原文: 创建型模式:建造者模式 五大创建型模式之四:建造者模式. 简介 姓名 :建造者模式 英文名 :Builder Pattern 价值观 :专治丢三落四 个人介绍 : Separate the construction of a complex object from its representation so that the same construction process can create different representations. 将一个复杂对象的构建与它的

【设计模式】 模式PK:工厂模式VS建造者模式

1.概述 工厂方法模式注重的是整体对象的创建方法,而建造者模式注重的是部件构建的过程,旨在通过一步一步地精确构造创建出一个复杂的对象.我们举个简单例子来说明两者的差异,如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷.能够飞翔.内裤外穿的超人:而如果使用建造者模式,则需要组装手.头.脚.躯干等部分,然后再把内裤外穿,才能创造一个超人. 2.工厂方法建造超人 2.1 类图 首先我们按照工厂方法创造超人,我们来看类图.类图中我们按照年龄段把超人分为两种类型:成年超人(如克拉克.

【图解】抽象工厂模式PK建造者模式

抽象工厂模式: 如果换成建造者模式,建造者会先组装车的各个零配件,然后在生产成一部车. [图解]抽象工厂模式PK建造者模式

C#设计模式之创建类模式:建造者模式

无论在现实世界中还是软件工程中,都存在一些复杂对象,他们拥有多个组成部分,例如汽车.电脑.冰箱.洗衣机等.他们包含了大量的零部件.对于大部分用户而言,他们并不知道这些部件的装配细节,也几乎不会适用单独某部件,而是使用一辆完整的汽车,一个完整的冰箱或洗衣机.如何将这些部件组装成一个完整的产品并返回给客户,是建造者模式需要解决的问题,建造者模式可以将部件本身和他们的组装过程分开,它关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而不是知道其内部的实现细节

7创建型模式之建造者模式

概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法 角色和职责 1)

Java设计模式百例 - 建造者模式

本文源码见:https://github.com/get-set/get-designpatterns/tree/master/builder 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象,这种类型的设计模式属于创建型模式.建造模式可以将一个复杂对象的内部组成部分,与该对象本身的创建分离开来,从而使得复杂对象的组装更灵活. 文绉绉的话不宜多说,其实这种模式还是挺常见的: * 比如我们在订手机套餐的时候,无论是自选还是电信公司配置好的,通常一个套餐包括

Java设计模式之(建造者模式)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式通常包括下面几个角色: 1. builder:抽象建造者,给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建.2. ConcreteBuilder:建造者,实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建. 在建造过程完成后,提供产品的实例.3. Director:导演类,调用具体建造者来创建复杂

java模式:建造者模式

我发现很多源码很喜欢用这个模式,比如spring cloud,spring framework. 建造者模式(Builder)用以构建各种各样的对象,主要功能就是代替对象的构造函数,更加自由化. 举个栗子,先假设有一个问题,我们需要创建一个学生对象,属性有name,number,class,sex,age,school等属性,如果每一个属性都可以为空,也就是说我们可以只用一个name,也可以用一个school,name,或者一个class,number,或者其他任意的赋值来创建一个学生对象,这时