美文网首页
建造模式

建造模式

作者: Simple_a | 来源:发表于2019-03-12 23:05 被阅读0次

    建造(Builder)模式又称生成模式。它将一个复杂对象的构建过程和对象的表示过程分离开来。

    建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

    什么是内部表象?

    《设计与模式》中是这样描述的:

    “一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,他们通常又叫做产品的内部表象。不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的,以及怎样组成产品。”

    再谈工厂模式

    工厂模式也是对象的创建模式,通常我们利用工厂模式是直接创建一系列对象,但是工厂模式创建对象是:既包含创建过程,又包含了创建对象功能。比如创造人,工厂模式即创建了人(产品),也创建了人的组成部分(零件):手、脚和头。

    而建造模式却解决了这一个问题,它将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。

    类图及代码实现

    各个部件及其作用

    image

    指挥者

    1. 作用:构建Builder对象接口的对象。指挥者调度具体的构建细节。
    2. 用于创建一些复杂对象(有建造细节,即有很多零件组成的产品)。
    3. 适用于对象内部构建过程和顺序比较稳定的过程。

    建造者

    1. 作用:创建一个产品对象的各个部件的抽象接口。

    具体建造者

    1. 实现Builder接口,描写各个部件的具体细节。

    Product: 具体产品

    类图

    image
    /*
     * 产品
     */
    public class Product {
        private String parts;
        // 添加产品
        public void addParts(String s) {
            this.parts = s;
            System.out.println("建造:"+s);
        }
        public String toString() {
            return this.parts;
        }
    }
    /*
     * 建造者类接口
     */
    public abstract class Builder {
        //封装了一个产品类的引用
        protected Product pr;
        // 构造方法,在创建建造者类对象的同时,也创建了产品类对象。
        public Builder(){
            pr = new Product();
        }
        
        // 返回产品对象
        public Product getProduct() {
            return pr;
        }
        // 创建各个部分零件的方法
        public abstract void buildPartA();
        public abstract void buildPartB();
        public abstract void buildPartC();
    }
    
    /*
     * 具体建造者
     */
    public class ConcreteBuilderA extends Builder{
        public ConcreteBuilderA() {
            super();
            System.out.println("建造产品中"+"... ...");
        }
    
        @Override
        public void buildPartA() {
            pr.addParts("partA");
        }
    
        @Override
        public void buildPartB() {
            pr.addParts("partB");
        }
    
        @Override
        public void buildPartC() {
            pr.addParts("partC");
            
        }
    
    }
    /*
     * 指挥者
     */
    public class Director {
        public void construct(Builder b) {
            // 顺序调用,依次组建产品的各个部分
            b.buildPartA();
            b.buildPartB();
            b.buildPartC();
            System.out.println("建造完成!");
        }
    }
    /*
     * 客户端
     */
    public class Client {
        public static void main(String[] args) {
            // 创建一个指挥者对象
            Director d = new Director();
            // 创建一个具体构建者对象
            ConcreteBuilderA cbA = new ConcreteBuilderA();
            // 开始创建
            d.construct(cbA);
            // 获取已经创建的产品
            Product product = cbA.getProduct();
        }
    }
    

    相关文章

      网友评论

          本文标题:建造模式

          本文链接:https://www.haomeiwen.com/subject/ovxapqtx.html