一天一个设计模式:建造模式

概念:

  建造模式是对象的创建模式,建造模式可以将一个产品的内部表象(个人理解,可以称为组件)与产品的生产分割开来,从而可以使一个建造过程生产出来具有不同内部表象的产品对象。

概念:

产品的内部表象:

  产品不同组成成分构成(组件)这些零件可以是对象,也可以是非对象,称为内部表象(internal representation),不同的产品可以有不同的内部表象,也就是不同的零件,使用建造模式可以使客户端不需要知道生产的产品有哪些零件,每个产品的对应零件批次有什么不同,是怎么建造出来的,怎么组装产品。

内部表象的建造:

  构建对象的过程外化到另一个建造者对象内完成,而建造者对象返回给客户端的是一个建设完毕的产品对象(将零件的构建跟产品的交付分开)。

uml结构图:

四个角色:

  抽象构建者(Builder)角色:给出抽象接口,规范产品对象的组件的生产方式,该接口通常独立于应用程序的商业逻辑。抽象的方法往往与对象的组件有关。

  具体建造者(ConCreateBuilder)角色:实现抽象接口,完成组件的构建,并提供一个方法用于组装最终的产品。

  导演者(director)角色:调用具体的建造者角色以创建产品对象,仅仅起到指挥的作用。

  产品(product)角色:产品是最终的产品角色,包含各种不同的组件。

  

  导演者角色是与客户端打交道的角色。导演者将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。

  一般来说,每有一个产品类,就有一个相应的具体建造者类。这些产品应当有一样数目的零件,而每有一个零件就相应地在所有的建造者角色里有一个建造方法。

产品类product

public class Product {
    /**
     * 定义一些关于产品的操作
     */
    private String part1;
    private String part2;
    public String getPart1() {
        return part1;
    }
    public void setPart1(String part1) {
        this.part1 = part1;
    }
    public String getPart2() {
        return part2;
    }
    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

抽象建造者类Builder

public interface Builder {
    public void buildPart1();
    public void buildPart2();
    public Product retrieveResult();
}

具体建造者类ConcreteBuilder

public class ConcreteBuilder implements Builder {

    private Product product = new Product();
    /**
     * 产品零件建造方法1
     */
    @Override
    public void buildPart1() {
        //构建产品的第一个零件
     product.setPart1("编号:9527");
    }
    /**
     * 产品零件建造方法2
     */
    @Override
    public void buildPart2() {
        //构建产品的第二个零件
     product.setPart2("名称:XXX");
    }
    /**
     * 产品返还方法
     */
    @Override
    public Product retrieveResult() {
        return product;
    }

}

导演者类Director

public class Director {
    /**
     * 持有当前需要使用的建造器对象
     */
    private Builder builder;
    /**
     * 构造方法,传入建造器对象
     * @param builder 建造器对象
     */
    public Director(Builder builder){
        this.builder = builder;
    }
    /**
     * 产品构造方法,负责调用各个零件建造方法
     */
    public void construct(){
        builder.buildPart1();
        builder.buildPart2();
    }
}

客户端类Client

public class Client {
    public static void main(String[]args){
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        director.construct();
        Product product = builder.retrieveResult();
        System.out.println(product.getPart1());
        System.out.println(product.getPart2());
    }
}

原文地址:https://www.cnblogs.com/lilinzhiyu/p/9885003.html

时间: 2024-11-05 20:46:28

一天一个设计模式:建造模式的相关文章

设计模式:建造模式

原文地址:http://leihuang.org/2014/12/03/builder/ Creational 模式 物件的产生需要消耗系统资源,所以如何有效率的产生.管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向.下面列举到的全属于Creational 模式 Simple Factory 模式 Abstract Factory 模式 Builder 模式 Factory Method 模式 Protot

一天一个设计模式——迭代器模式

一.模式说明 迭代操作在程序开发中很常见:在数据集合中按顺序便利所有元素(例如:遍历一个数组中的所有元素),将遍历时使用的索引(如访问数组循环变量i)抽象化.通用化后形成的模式就是迭代器模式. 核心的迭代器一般包含两个方法:hasNext()和next()方法,前一个方法用于判断集合中是否还存在下一个需要迭代的元素,返回值类型是Bool类型:next()方法用于返回集合中一个元素,并且将迭代器移动到下一个元素. 该模式的UML图和示例代码UML图如下: 迭代模式的UML很简单,包含两个接口:Ag

【设计模式】建造模式

引子 前几天陪朋友去装机店攒了一台电脑,看着装机工在那里熟练的装配着机器. 作为装机工,他们不用管你用的 CPU 是 Intel 还是 AMD,也不管你的显卡是 2000 千大元还是白送的,都能三下五除二的装配在一起. 一台 PC 就诞生了! 当然对于客户来说,你也不知道太多关于 PC 组装的细节. 这和建造模式是多么的相像啊! 定义与结构 GOF 给建造模式的定义为:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话说得很抽象,不好理解,其实它的意思可以理解为:

6. 星际争霸之php设计模式--建造器模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248181.html============================================

设计模式之七:建造模式(Builder Pattern)

建造者模式就是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示. 适用范围: 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 当构造过程必须允许被构造的对象有不同表示时. 建造者模式里面有四个角色: Builder: 给出一个抽象接口,以规范产品对象的各个组成部分的建造.一般而言,此接口独立于应用程序的业务逻辑.模式中直接创建产品对象的具体创建者角色.具体创建者角色必须实现这个接口的所有方法:一个是建造方法,另一个是结果返还方法. ConcreteBu

设计模式笔记——建造模式

定义:讲一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示.  将构造复杂对象的过程和组成对象的部件解耦 使用情况,满足以下条件可以考虑使用建造模式搭建框架: 1.产品有复杂的内部结构 2.系统中对此产品的需求将来可能改变产品对象的内部结构构成 3.不能将产品的内部构造完全暴漏给客户,一是为了可用性,二是为了安全因素 建造模式的组成: 1.抽象建造者角色(Builder):用来规范产品对象的哥哥组成成分的建造.一般而言,此角色独立于应用程序的业务逻辑. 2. 具体建造角色(

JAVA设计模式之建造模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 产品的内部表象 一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation).不同的产品可以有不同的内部表象,也就是不同的零

设计模式之建造模式

建造模式是对象的创建模式,建造模式可以将一个产品的内部表象和产品的生产过程分割开来,从而是一个建造过程生成具有不同的内部表象的产品 对象. 建造模式的结构如下类图所示: 在这个系统中,最终产品Product只有两个零件,即part1和part2,相应的建造方法也有两个:buildPart1()和buildPart2(),同时呢本模式涉及到四个角色,分别为: *抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成部分的建造,一般而言,此接口独立于应用程序的商业逻辑. *具体

一天一个设计模式——Abstract Factory抽象工厂模式

一.模式说明 前面学习了工厂方法(Factory Method)模式.在工厂方法模式中,在工厂方法模式中,父类决定如何生成实例,但并不决定所要生成的具体类,具体的处理交由子类来处理.这里学习的抽象工厂方法模式中,抽象工厂使用抽象的零件组装成抽象的产品.即使用包含特定的方法接口零件,将零件组装成抽象产品. 二.模式类图: 上面的类图中包含两个包:包含抽象工厂,抽象零件,抽象产品的类所在的包以及具体工厂实现类的包. 三.代码示例 1.Item类: package com.designpattern.