码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之————建造者模式

时间:2019-10-05 23:59:41      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:null   指定   创建   ted   rect   com   dingding   角色   产品   

建造者模式

1. 什么是建造者模式?

建造者模式属于创造型模式,它是将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现的对象。

举例:

普通房子和高楼,两者都很难建造,但也有相似点:打地基、砌墙、盖屋顶。

普通房子的地基5m,墙10cm;高楼的地基100m,墙20cm。

2. 建造者模式结构

  • Product(产品角色):一个具体的产品对象
  • Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类
  • ConcreteBuilder(具体建造者):实现接口,构建和装配各个部件
  • Director(指挥者):构建一个使用Builder接口的对象。主要是创建一个复杂的对象。主要作用是:一是隔离了客户与对象的生产过程;二是负责控制产品对象的生产过程。

3. Code

/**
 * @author dingding
 *  产品对象
 */
public class House {
    
    private String basic;
    private String wall;
    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(String basic) {
        this.basic = basic;
    }

    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;
    }

}
/**
 * @author dingding 
 * 抽象建造者
 */
public abstract class HouseBuilder {

    protected House house = new House();

    public abstract void buildBasic();

    public abstract void buildWalls();

    public abstract void roofed();

    public House buildHouse() {
        return house;
    }
}
/**
 * @author dingding
 *  具体构造者1
 */
public class CommonHouse extends HouseBuilder {

    @Override
    public void buildBasic() {
        System.out.println(" 普通房子打地基5米 ");
    }

    @Override
    public void buildWalls() {
        System.out.println(" 普通房子砌墙10cm ");
    }

    @Override
    public void roofed() {
        System.out.println(" 普通房子屋顶 ");
    }

}
/**
 * @author dingding 具体构造者2
 */
public class HignHouse extends HouseBuilder {

    @Override
    public void buildBasic() {
        System.out.println(" 高楼的打地基100米 ");
    }

    @Override
    public void buildWalls() {
        System.out.println(" 高楼的砌墙20cm ");
    }

    @Override
    public void roofed() {
        System.out.println(" 高楼的透明屋顶 ");
    }

}
/**
 * @author dingding 
 * 指挥者
 */
public class HouseDirector {

    HouseBuilder houseBuilder = null;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public House constructHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.buildHouse();
        return houseBuilder.buildHouse();
    }

}
/**
 * @author dingding
 *  客户端
 */
public class Client {
    
    public static void main(String[] args) {
        CommonHouse commonHouse = new CommonHouse();
        
        HouseDirector houseDirector = new HouseDirector(commonHouse);
        
        House house = houseDirector.constructHouse();
        
        System.out.println("----------------------");
        
        HignHouse hignHouse = new HignHouse();
        houseDirector.setHouseBuilder(hignHouse);
        house = houseDirector.constructHouse();
        
    }

}

设计模式之————建造者模式

标签:null   指定   创建   ted   rect   com   dingding   角色   产品   

原文地址:https://www.cnblogs.com/lfdingye/p/11625896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!