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

    建造者模式



    设计原则:遵循单一职责、开闭原则
    常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂
    使用概率:10%
    复杂度:中
    变化点:产品的表示
    选择关键点:各个产品的构建过程是否相同
    逆鳞:指挥者不能正常工作



    主要思想:
    把类的实例化交给建造者去进行赋值和实例化
    这里可以把建造者进行抽象化,就有了抽象建造者和实际建造者
    把建造者建造顺序等进一步简化就有了导演

    最简单
    public class Product {
        private String name;
        private String type;
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    }
    
    
    public class BuilderA {
        Product productA;
    
        public BuilderA() {
            productA = new Product();
        }
    
        public void buildName() {
            productA.setName("nameA");
        }
    
        public void buildType() {
            productA.setType("typeA");
        }
    }
    
    
    public class BuilderB {
        Product productB;
    
        public BuilderB() {
            productB = new Product();
        }
    
        public void buildName() {
            productB.setName("nameB");
        }
    
        public void buildType() {
            productB.setType("typeB");
        }
    }

    建造者抽象化 形成抽象建造者和实际建造者

    public interface Builder {
    
    
        public void buildName();
    
        public void buildType();
    
        public Product getProduct();
    }
    
    
    public class BuilderA implements Builder{
        Product productA;
    
        public BuilderA() {
            productA = new Product();
        }
    
        public void buildName() {
            productA.setName("nameA");
        }
    
        public void buildType() {
            productA.setType("typeA");
        }
    
        @Override
        public Product getProduct() {
            return productA;
        }
    }
    
    public class BuilderB implements Builder{
        Product productB;
    
        public BuilderB() {
            productB = new Product();
        }
    
        public void buildName() {
            productB.setName("nameB");
        }
    
        public void buildType() {
            productB.setType("typeB");
        }
    
        @Override
        public Product getProduct() {
            return productB;
        }
    }

    建造者干事简化

    public class Director {
        public Product constructProduct(Builder builder) {
            builder.buildName();
            builder.buildType();
            return builder.getProduct();
        }
    }
  • 相关阅读:
    phpcms中常用代码总结
    jQuery学习:用按键移动方块
    <item.../>元素可指定如下常用属性
    Microsoft.Office.Interop.Excel的用法
    科技与健康
    计算机系统的分类
    Android中的一些小知识
    android项目中各个文件的介绍
    Activity和Servlet的相似之处和区别
    在Activity的生命周期中,会被系统回调的方法
  • 原文地址:https://www.cnblogs.com/zhaojj/p/7767185.html
Copyright © 2011-2022 走看看