zoukankan      html  css  js  c++  java
  • 设计模式-建造者模式

    这个比较难理解,先看例子,你家里要装修,要打造一个家具,你爸和商场里的人说了要预定沙发

    沙发的属性

    public class Product {
       //沙发的底
        private String partA;
    //沙发的靠枕
    private String partB;
    //沙发的皮
    private String partC; public void setPartA(String partA) { this.partA = partA; } public void setPartB(String partB) { this.partB = partB; } public void setPartC(String partC) { this.partC = partC; } public void show(){ System.out.println("可以被使用"); } }

    产品组装手册(每个家具的拼装手册和步骤都不一样,所以要抽象出来)

    abstract class Builder {
        //产品最后要拼装好
        protected Product product=new Product();
    //拼接部件A
    public abstract void buildPartA();
    //拼接部件B
    public abstract void buildPartB();
    //拼接部件C
    public abstract void buildPartC(); //产品拼装好 public Product returnProduct(){ return product; } }

    具体的沙发拼装手册

    public class BuilderA extends Builder {
        @Override
        public void buildPartA() {
            product.setPartA("建造A部分");
        }
    
        @Override
        public void buildPartB() {
            product.setPartA("建造B部分");
        }
    
        @Override
        public void buildPartC() {
            product.setPartA("建造C部分");
        }
    }

    商场老板叫家具师傅拼装

    public class Director {
    //拿好手册
    private Builder builder; //老板提供手册 public Director(Builder builder) { this.builder = builder; } //产品组装 public Product construct(){
    //拼装部件A,B,C
    builder.buildPartA(); builder.buildPartB(); builder.buildPartC();
    //拼装好之后返回这个产品
    return builder.returnProduct(); } }

    去商场提沙发

    public class Client {
        public static void main(String[] args) {
    //有人要买沙发 BuilderA builderA
    = new BuilderA();
    //老板找到沙发拼装手册 Director director
    = new Director(builderA);
    //老板叫师傅拼装好沙发 Product construct
    = director.construct();
    //沙发已经好了,可以使用了 construct.show(); } }

    由上面的例子可以看出,一个建造者模式设计4个角色

    产品(沙发):包含多个组件的复杂对象

    抽象建造者(拼装手册):一个包含创建产品各个成员组件的抽象类

    具体建造者(具体的产品拼装方法): 实现创建产品各个部件的具体创造方法

    指挥者(老板):调用抽象建造者对象中的组装方法完成对象的创建,不涉及产品的具体拼装过程

    总结来说 建造者模式就是将某个复杂对象的成员属性进行拆分,由具体的建造者来建造,指挥者只需要调用具体建造者的方法来进行组件拼装,具体的细节交给建造者来实现。

    应用场景:创建的对象虽然很复杂,会有多个部件,各部件也由可能发生变化,但组装顺序还是相对稳定的。

    不和别人一样,不复制只真正理解
  • 相关阅读:
    对 HTML 语义化的理解
    cookies,sessionStorage 和 localStorage 的区别
    display:none和visibility:hidden两者的区别
    页面导入样式时,使用link和@import有什么区别
    ES6之let和const
    v-if和v-show 的区别
    解决:Sass Loader has been initialised using an options object that does not ma tch the API schema.
    [转]javaweb学习总结(十四)——JSP原理
    [转]JavaWeb学习总结(十三)——使用Session防止表单重复提交
    [转]JavaWeb学习总结(十二)——Session
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12780880.html
Copyright © 2011-2022 走看看