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

    一,什么是建造者模式

    Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

    二,例子

    四个要素

    产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。

    抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。

    具体建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。

    导演类:负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。

    具体产品类House

    /**
     * 
     * @类名称:House
     * @类描述:具体产品
     * @创建人:zender
     */
    public class House {
        // 地板
        private String floor;
        //
        private String wall;
        // 屋顶
        private String housetop;
     
        public String getFloor() {
            return floor;
        }
         // get/set忽略
    }

    抽象建造者Builder:

    /**
     * 
     * @类名称:HouseBuilder
     * @类描述:抽象建造者Builder
     * @创建人:zender
     */
    public interface HouseBuilder {
        //修地板
        public void makeFloor();
        //修墙
        public void makeWall();
        //修屋顶
        public void makeHousetop();
        public House getHouse();
    }

    具体建造者Builder:

    /**
     * 
     * @类名称:GongyuBuilder
     * @类描述:具体建造者Builder
     * @创建人:zender
     */
    public class GongyuBuilder implements HouseBuilder {
        House house = new House();
        
        public House getHouse() {
            return house;
        }
        public void makeFloor() {
            house.setFloor("公寓-->地板");
        }
        public void makeHousetop() {
            house.setHousetop("公寓-->房顶");
        }
        public void makeWall() {
            house.setWall("公寓-->墙");
        }
    }

    导演类Director:

    /**
     * 
     * @类名称:HouseDirector
     * @类描述:导演类Director
     * @创建人:zender
     */
    public class HouseDirector {
        public void makeHouse(HouseBuilder builder) {
            builder.makeFloor();
            builder.makeWall();
            builder.makeHousetop();
        }
    }

    测试类:

    public class Test {
        public static void main(String[] args) {
            //由工程队来修房子
            HouseBuilder builder = new GongyuBuilder();
            //设计者来做设计
            HouseDirector director = new HouseDirector();
            director.makeHouse(builder);
            
            House house = builder.getHouse();
            System.out.println(house.getFloor());
            System.out.println(house.getWall());
            System.out.println(house.getHousetop());
        }
    }

    结果:

    三、建造者模式应用场景

    - 对象的创建

    Builder模式是为对象的创建而设计的模式

    - 创建的是一个复合对象

    创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。

    四,使用建造者模式的好处

    1,使用建造者模式可以使客户端不必知道产品内部组成的细节。

    2,具体的建造者类之间是相互独立的,对系统的扩展非常有利。

    3,由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。

  • 相关阅读:
    Virtuabox 虚拟机克隆方法
    CentOS 7 防火墙 出现Failed to start iptables.service: Unit iptables.service failed to load
    Linux系统下安装rz/sz命令及使用说明
    os、sys模块
    collections、random、hashlib、configparser、logging模块
    time、datatime模块
    正则表达式、re模块
    递归、二分查找法
    内置函数、匿名函数
    生成器进阶、生成器表达式
  • 原文地址:https://www.cnblogs.com/Zender/p/7357314.html
Copyright © 2011-2022 走看看