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

           HeadFirst中并没有把建造者模式(生成器模式)当做常用的设计模式来讲解,只是在附录中一带而过。

           建造者模式的本质:
           分离了对象组件的单独构造(由Builder来负责)和装配(由Director)来负责。从而可以构建出复杂的对象。这个模式适用于:某个对象的构建
           过程复杂的情况先使用。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象相同的构建器不同的装配顺序也可以

           做出不同的对象。也就是实现了构建算法、装配算法的解耦,实现了更好的复用。

           Demo:

          

    package com.wxisme.builder;
    
    /**
     * 飞船
     * @author Administrator
     *
     */
    public class AirShip {
    	
    	private OrbitalModule orbitalModule;  //轨道仓
    	private Engine engine; //发动机
    	private EscapeTower escapeTower;  //逃逸塔�
    	
    	
    	public void launch(){
    		System.out.println("发射!");
    	}
    	
    	
    	
    	public OrbitalModule getOrbitalModule() {
    		return orbitalModule;
    	}
    	public void setOrbitalModule(OrbitalModule orbitalModule) {
    		this.orbitalModule = orbitalModule;
    	}
    	public Engine getEngine() {
    		return engine;
    	}
    	public void setEngine(Engine engine) {
    		this.engine = engine;
    	}
    	public EscapeTower getEscapeTower() {
    		return escapeTower;
    	}
    	public void setEscapeTower(EscapeTower escapeTower) {
    		this.escapeTower = escapeTower;
    	}
    	
    	
    	
    }
    
    class OrbitalModule{
    	private String name;
    
    	public OrbitalModule(String name) {
    		this.name = name;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    }
    
    class Engine {
    	private String name;
    
    	public Engine(String name) {
    		this.name = name;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	
    }
    
    class EscapeTower{
    	private String name;
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public EscapeTower(String name) {
    		super();
    		this.name = name;
    	}
    	
    }
    
    
    
    
    
    public interface AirShipBuilder {
    	Engine builderEngine();
    	OrbitalModule builderOrbitalModule();
    	EscapeTower  builderEscapeTower();
    }
    
    
    public interface AirShipDirector {
    	
    	AirShip   directAirShip();
    	
    }
    
    
    
    public class MyAirShipBuilder implements AirShipBuilder {
    
    	//StringBuilder, 以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
    	@Override
    	public Engine builderEngine() {
    		System.out.println("构建发动机");
    		return new Engine("MyEngine");
    	}
    
    	@Override
    	public EscapeTower builderEscapeTower() {
    		
    		System.out.println("构建逃逸塔");
    		return new EscapeTower("MyEscapeTower");
    	}
    
    	@Override
    	public OrbitalModule builderOrbitalModule() {
    		System.out.println("构建轨道仓");
    		return new OrbitalModule("MyOrbitalModule");
    	}	
    	
    }
    
    
    
    public class MyAirshipDirector implements AirShipDirector {
    
    	private AirShipBuilder builder;
    
    	public MyAirshipDirector(AirShipBuilder builder) {
    		this.builder = builder;
    	}
    
    
    	@Override
    	public AirShip directAirShip() {
    		Engine e = builder.builderEngine();
    		OrbitalModule o = builder.builderOrbitalModule();
    		EscapeTower et = builder.builderEscapeTower();
    		
    		//装配飞船对象
    		AirShip ship = new AirShip();
    		ship.setEngine(e);
    		ship.setEscapeTower(et);
    		ship.setOrbitalModule(o);
    		
    		return ship;
    	}
    
    }
    
    
    public class Client {
    	public static void main(String[] args) {
    		
    		AirShipDirector director = new MyAirshipDirector(new MyAirShipBuilder());
    
    		AirShip ship = director.directAirShip();
    		
    		System.out.println(ship.getEngine().getName());
    		
    		ship.launch();
    		
    	}
    }
    
  • 相关阅读:
    常见浏览器的兼容问题
    SCSS 的理解
    常见浏览器兼容性问题与解决方案(上)
    常见浏览器兼容性问题与解决方案(下)
    ie6定位absolute bug触发layout解决
    AngularJS 最常用的八种功能
    IE6的3像素bug
    CSS属性级Hack
    什么是SASS
    什么是less?
  • 原文地址:https://www.cnblogs.com/wxisme/p/4520998.html
Copyright © 2011-2022 走看看