每日设计模式-建造者模式

226 阅读2分钟

1、介绍

1、1 建造者模式定义

  • 建造者模式也叫做生成器模式,将一个复杂对象的建造与他的表示分离,使得同样的构造过程可以创建不同的表示。
  • 建造者模式类图

1、2 角色

  • 建造者模式中的角色

    角色 定义
    Product产品类 通常是实现了模板方法模式。也就是模板方法的一般方法和模板方法
    Builderc抽象建造者 规范产品的组建,一般由子类实现
    ConcreteBuilder具体建造者 实现抽象方法的所有方法,并且返回一个组建好的对象
    Director指挥类 负责安排已有模块的顺序,然后告诉builder开始建造。
  • 通用代码

    /**
     * 产品类
     */
    public class Product {
    
        public void doSomething(){
            //独立业务逻辑
        }
    }
    /**
     * 抽象建造者
     */
    public abstract class Builder {
    
        /**
         * 设置不同的部分,获得不同的产品
         */
        public abstract void setPart();
    
        public abstract Product buildProduct();
    }
    /**
     * 具体建造者
     */
    public class ConcreteBuilder extends Builder {
    
        private Product product;
    
        public ConcreteBuilder(Product product){
            this.product = product;
        }
    
        @Override
        public void setPart() {
            /**
             * 产品类内的逻辑处理
             */
        }
    
        /**
         * 组件一个产品
         * @return
         */
        @Override
        public Product buildProduct() {
            return this.product;
        }
    }
    /**
     * 指挥类
     */
    public class Director {
    
        private ConcreteBuilder builder = new ConcreteBuilder(new Product());
    
        public Product getProduct(){
            builder.setPart();
            return builder.buildProduct();
        }
    }
    

1、3 应用

  • 优缺点

    优点 缺点
    封装性:使用建造者模式可以使客户端不
    必知道产品内部的组成细节
    只适用于有相同特点的产品,如果之间的差异很大,则不适用,适用范围受限制
    建造者独立,便于扩展 产品的变更,多个建造者都需要修改
    便于控制细节风险。可以对建造者过程逐步
    不影响其他的模块
    .
  • 使用场景

    • 相同的方法,不同的执行顺序,产生不同的事件结果,可以采用建造者模式
    • 多个部件或者零件,都可以装配到一个对象中,但是产生的运行结果不同时
    • 产品类非常复杂,或者是产品类中的调用顺序不同产生不同的效果时
    • 如果想把复杂对象的创建和使用分离开来,那么使用建造者模式
  • 建造者模式和简单工厂模式

    • 它们都属于创建型模式「都是创建产品的」
    • 建造者模式关注的零件类型和装配顺序,工厂模式创建的对象都是一样的,创建出来就可以了。总结来说就是注重点不同。