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


    建造者模式

    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();
    		
    	}
    
    }
    
    
  • 相关阅读:
    160309_Qt Essentials
    160309_Qt Reference Documentation
    160308_Signals & Slots
    160308_Helloworld_Gui Application
    网络爬虫(14)-动态页面爬取
    数据分析(6)-Pandas日期数据处理
    mysql基础(2)-excel功能在excel中如何实现?
    数据分析(5)-数据可视化常用图表类型和使用场景
    财经数据(6)-Python多进程爬虫东方财富个股盘口异动数据
    财经数据(5)-开盘啦股票标签数据爬虫
  • 原文地址:https://www.cnblogs.com/lfdingye/p/11625896.html
Copyright © 2020-2023  润新知