23种设计模式----------建造者模式

建造者模式:像是模板方法模式的升级。也叫生成器模式。将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。其实就是创建一大类的东西, 但是具体又有些差异。

在建造者模式中,一般有四个角色:

1,Product产品类。

  该类一般实现了模板方法模式。

2,Builder抽象的建造者。

  规范产品的组建,一般是由子类实现。

3,ConcreteBuilder具体的建造者。

  实现抽象类定义的所有方法,并且可以返回一个组建好的具体对象。

4,Director导演类(一般是包涵多种具体产品差异的方法)。

大致示例代码:

Product类:

1 package com.yemaozi.builderpattern;
2
3 public abstract class Product {
4     //一般实现模板方法的抽象类。
5 }

具体的Product类:

//ProductA
package com.yemaozi.builderpattern;

public class ProductA extends Product{
    public void doSomething(){

    }
}
//ProductB
package com.yemaozi.builderpattern;

public class ProductB extends Product{
    public void doSomethding(){

    }
}

建造器:

1 package com.yemaozi.builderpattern;
2
3 public interface Builder {
4     //设置产品不同的方法
5     public abstract void setPart();
6     //构建产品
7     public abstract Product builderProduct();
8 }

具体的建造器,具体的建造器个数与具体产品类的数目一致。

 1 //ConcreteBuilderA
 2 package com.yemaozi.builderpattern;
 3
 4 public class ConcreteBuilderA implements Builder{
 5
 6     Product p = new ProductA();
 7
 8     public void setPart() {
 9     }
10
11     public Product builderProduct() {
12         return p;
13     }
14 }
15 //ConcreteBuilderB
16 package com.yemaozi.builderpattern;
17
18 public class ConcreteBuilderB implements Builder{
19
20     Product p = new ProductB();
21
22     public void setPart() {
23     }
24
25     public Product builderProduct() {
26         return p;
27     }
28 }

导演类:导演类一般是为了预设置不同产品差异的,若是想得到对应的产品,直接到Director里获取,因为,该类就是为了生产出所有的产品,以供获取。导演类一般可以有多个。

 1 package com.yemaozi.builderpattern;
 2
 3 public class Director {
 4     private Builder b1 = new ConcreteBuilderA();
 5     private Builder b2 = new ConcreteBuilderB();
 6     //构建A产品
 7     public Product getProductA(){
 8         b1.setPart();
 9         Product p = b1.builderProduct();
10         return p;
11     }
12     //构建B产品
13     public Product getProductB(){
14         b2.setPart();
15         return b2.builderProduct();
16     }
17 }

此外,建造者模式还有一个重要的角色,就是零件(理解为产品类里的方法),建造者是通过零件的组装来创建对象。组装顺序不同(调用方法顺序不同),建造的对象就会有着差异,也是,建造者模式要表达的核心意义。说白了,建造者最主要的功能是基本方法的调用顺序的安排。

和工厂模式的差异:

  工厂方法模式重点是创建。创建零件是它的主要职责,组装顺序不是它关心的。

  建造者模式重点是对已产生的零件进行组装。从而也达到创建对象的效果。

时间: 2024-10-10 01:49:40

23种设计模式----------建造者模式的相关文章

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一

23种设计模式----------代理模式(二)

(上一篇)23种设计模式----------代理模式(一) 之前说了基本的代理模式和普通代理模式.接下来开始看下强制代理模式和虚拟代理模式 三,强制代理模式: 一般的代理模式都是通过代理类找到被代理的对象,从而调用被代理类中的方法(即完成被代理类中的任务). 而,强制代理模式则是先找到被代理类自己去完成事情,然后被代理类又将该做的事情转交到代理类中,让代理类来完成. 假如:你有事求助于某位名人. 你告诉名人说有事想请他帮忙,然后他说最近一段时间比较忙,要不你找我的经纪人来办吧. (本来找名人办事

23种设计模式----------代理模式(一)

代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者接口) IGamePlayer 2,代理类. 3,被代理类. 下面以游戏玩家代理为例. 一,先来看下最基本的代理模式. 代码如下: 主题接口: 1 package com.yemaozi.proxy.base; 2 3 //游戏玩家主题接口 4 public interface IGamePlaye

23种设计模式----------代理模式(三) 之 动态代理模式

(上一篇)种设计模式----------代理模式(二) 当然代理模式中,用的最广泛的,用的最多的是  动态代理模式. 动态代理:就是实现阶段不用关系代理是哪个,而在运行阶段指定具体哪个代理. 抽象接口的类图如下: --图来自设计模式之禅 所以动态代理模式要有一个InvocationHandler接口 和 GamePlayerIH实现类.其中 InvocationHandler是JD提供的动态代理接口,对被代理类的方法进行代理. 代码实现如下 抽象主题类或者接口: 1 package com.ye

23种设计模式--工厂模式-Factory Pattern

一.工厂模式的介绍       工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例就就依赖与这个类,2者之间的耦合度就高,此时我们就可以使用面向对象的去解决这个问题,将变化点封装起来,这就是我们将要首先引入的简单工厂模式:先来说一个场景,比如我们吃水果这个例子吧,我们有时候想吃苹果,有时候想吃橘子,但是每次都需要去买这些水果,后来有个水果店,又卖橘子,又卖苹果,这个水果店就当于简

23种设计模式--桥接模式

一.桥接模式的介绍 桥接其实说白就是走近路嘛,来个简单例子来说班级要到B地区去旅游,但是不是集体组织去,自己去到B地就可以了,这样就会诞生三种出行方式,那就是水,路,空,桥接的意思就是将水,路,空这三个地方建立一个港口,那样大家到B地区的中转战始终就是一个,大概的意思就是这,虽然有点不恰当,但是我感觉这样一说大家会比较明朗一点:不行就再来一个例子,存钱的例子来说吧,众所周知的,中国有四大行(工,农,中,建),你选择去某家存钱,存钱的方式有三种(活期,定期),但是银行不止这几家杭州银行等等本地新兴

23种设计模式--组合模式

一.组合模式的介绍 组合我们第一下想到的肯定是由部分到整体,没错确实就是这样,我的理解就是整体与部分的层次关系,且在关系中的所有对象都有相同的操作;这个来试用场景大家或许更明白文件夹的操作,组织架构等等,反正这一类具有层次关系的我们都可以考虑是否使用组合模式. 二.组合模式的Demo public abstract class Position    {        public string _name;        public Position(string name)       

23种设计模式--代理模式-Proxy

一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到什么远程代理,虚拟代理等等这一些都是代理模式得具体例子,来个官方定义就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用:下面我们用代购的例子来说明一下这个情况:你想买一台iphone,国行有点贵,然后拜托海外的朋友买一台给你带回来,就是这样的一个例子,首先我们先将买东西这个主题抽象出来,然后再把真实

Java经典23种设计模式之创造型模式(二)

本文记录5种创造型模式的剩下两种:建造者模式(Builder).原型模式(PROTOTYPE). 一.建造者模式(别名:生成者模式) 将复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示.一个完整的建造者模式包含以下几个概念: 1.产品类 Product public class Person { private String head; private String body; private String foot; public String getHead() { ret