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

    将产品和产品的建造过程进行解耦 ===> 建造者模式

    1 盖房子需求

    clipboard

     

    2 传统方式解决盖房需求

    1)思路

    创建一个抽象的房子类,类中是抽象的建造方法,具体类中实现抽象的方法,

    clipboard

     

    3 传统方式的问题分析

    1)优点是好理解,操作简单

    2)设计的程序结构,过于简单,没有设计缓冲层对象,程序的扩展和维护性不强。(也就是说这种设计方案将

    产品(房子)和创建产品的过程(建造房子的过程)封装在一起,耦合性增强了)

    3)解决方案:将产品和产品的建造过程解耦

     

    4 建造者模式基本介绍

    clipboard

     

    5 建造者模式的四个角色

    clipboard

     

    6 建造者模式原理类图

    clipboard

    7 建造者模式解决盖房需求应用实例

    clipboard

    1)产品:

    public class House {
    
        private String baise;
        private String wall;
        private String roofed;
    
        public String getBaise() {
            return baise;
        }
    
        public void setBaise(String baise) {
            this.baise = baise;
        }
    
        public String getWall() {
            return wall;
        }
    
        public void setWall(String wall) {
            this.wall = wall;
        }
    
        public String getRoofed() {
            return roofed;
        }
    
        public void setRoofed(String roofed) {
            this.roofed = roofed;
        }
    }

    2)抽象的建造者

    /**
     * @author houChen
     * @date 2020/9/25 7:18
     * @Description: 建造者模式中抽象的建造者
     */
    public abstract class HouseBuilder {
    
        protected House house = new House();
    
        // 建造的流程
        //打桩
        public abstract void buildBasic();
    
        //砌墙
        public abstract void buildWalls();
    
        //封顶
        public abstract void roofed();
    
        //建造房子
        public House build(){
           /* buildBasic();
            buildWalls();
            roofed();*/
            return house;
        }
    
    }

    3)具体的建造者

    /**
     * @author houChen
     * @date 2020/9/25 7:21
     * @Description:
     */
    public class CommonHouse extends HouseBuilder {
        @Override
        public void buildBasic() {
            System.out.println("给普通房子打桩!5米 ");
        }
    
        @Override
        public void buildWalls() {
            System.out.println("给普通房子砌墙!6米 ");
        }
    
        @Override
        public void roofed() {
            System.out.println("给普通房子盖顶!7米 ");
        }
    }

    4)建造模式中的指挥者

    /**
     * @author houChen
     * @date 2020/9/25 7:24
     * @Description:  建造者模式中的指挥者
     */
    public class HouseDirector {
        HouseBuilder houseBuilder = null;
    
        public HouseDirector(HouseBuilder houseBuilder) {
            this.houseBuilder = houseBuilder;
        }
    
        //将房子建造的过程交给指挥者
        public House constractHouse(){
            houseBuilder.buildBasic();;
            houseBuilder.buildWalls();
            houseBuilder.roofed();
            return houseBuilder.build();
        }
    }

    5)测试

    public class Client {
        public static void main(String[] args) {
            CommonHouse commonHouse = new CommonHouse();
           HouseDirector director = new HouseDirector(commonHouse);
            House house = director.constractHouse();
            System.out.println(house);
        }
    }

    image

  • 相关阅读:
    操作缓冲池
    占位图像
    GCD 常用代码
    资源共享(抢夺)
    drf版本控制 django缓存
    drf分页器
    解析器,路由控制,响应器
    drf 频率组件 META字典详情
    vue创建路由,axios前后台交互,element-ui配置使用,django contentType组件
    redis列表,字典,管道,vue安装,创建项目
  • 原文地址:https://www.cnblogs.com/houchen/p/13762803.html
Copyright © 2011-2022 走看看