Java中的23个设计模式 【创造型模式】 中的 【建造者模式】

文章目录

  • 设计模式分类
  • 建造者模式
    • 代码

设计模式分类

  • 创建型模式
    • 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式
    • 关注对象的创建过程
  • 结构型模式
    • 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
    • 关注对象和类的组织
  • 行为型模式
    • 模板方法模式、命令模式、迭代器模式、观察者模式、中介模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式、访问者模式
    • 关注系统同对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责

建造者模式

  • 场景:
    • 我们要建造一个复杂的产品。比如:神州飞船、Iphone。这个复杂的产品的创建,有这样一个问题需要处理:
      • 装配这些子组件是不是有个步骤问题?
    • 实际开发中,我们所需要的对象构建时,也非常复杂,有很多步骤需要处理。
  • 建造模式的本质:
    • 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。
    • 由于实现了构建和装配的解耦。不同的构造器,相同的装配,也可以做出不同的对象;相同的构造器,不同的装配顺序也可以做出不同的对象。也就是实现了构造算法、装配算法的解耦,实现了更好的复用
  • 开发中应用场景
    • StringBuilder类的append方法
    • SQL中的PreparedStatement
    • JDOM中,Dombuilder、SAXBbuilder

代码

以建造宇宙飞船为例

  • 宇宙飞船包括:(AirShip)
    • 发动机(Engine)
    • 逃离塔(EscapeTower)
    • 轨道舱(OrbitalModule)
  • 建造飞船零件接口(AirShipBuilder)
  • 装配飞船接口(AirShipDirector)
  • 建造零件实现类(MyAirShipBuilder)和装配飞船实现类(MyAirShipDirector)
  • 通过客户端(调用者)调用
  • 零件

    //发动机
    public class Engine {
           
    	private String name;
    	
    
    	public Engine(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    }
    
    //轨道舱————————————————————————————————————————————————————————
    public class OrbitalModule{
           
    	private String name;
    	
    	public OrbitalModule(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    	
    }
    
    //逃离塔——————————————————————————————————————————————————————————
    public class EscapeTower {
           
    	private String name;
    	
    
    	public EscapeTower(String name) {
           
    		super();
    		this.name = name;
    	}
    
    	public String getName() {
           
    		return name;
    	}
    
    	public void setName(String name) {
           
    		this.name = name;
    	}
    }
    
  • 宇宙飞船及零件,以及添加飞船的各种方法

    package builder;
    
    /**
     * 宇宙飞船
     * @author 橙汁儿Drk
     *
     */
    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;
    	}	
    }
    
    
    
    
  • 建造接口和装配接口

    //建造
    public interface AirShipBuilder {
           
    	
    	Engine builderEngine();
    	OrbitalModule builderOrbitalModule();
    	EscapeTower builderEscapeTower();
    }
    
    //装配
    public interface AirShipDirector {
           
    	
    	/**
    	 * 组装飞船对象
    	 * @return
    	 */
    	AirShip directAirShip();
    }
    
    
  • 建造实现类和装配实现类

    //建造
    public class MyAirShipBuilder implements AirShipBuilder{
           
    
    	@Override
    	public Engine builderEngine() {
           
    		System.out.println("构建发动机");
    		return new Engine("我的发动机");
    		
    	}
    
    	@Override
    	public OrbitalModule builderOrbitalModule() {
           
    		System.out.println("构建轨道舱");
    		return new OrbitalModule("我的轨道舱");
    	}
    
    	@Override
    	public EscapeTower builderEscapeTower() {
           
    		System.out.println("构建逃逸塔");
    		return new EscapeTower("我的逃逸塔");
    	}
    
    }
    
    //装配
    package builder;
    
    public class MyAirshipDirector implements AirShipDirector{
           
    
    	private AirShipBuilder builder;//通过装配的构造器把建造对象传进来
    	
    	public MyAirshipDirector(AirShipBuilder builder) {
           
    		super();
    		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;//将飞船结果返回
    	}
    
    }
    
    
  • 调用者(客户端)类

    package builder;
    
    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();
    
    	}
    			
    }
    
    //结果————————————————————————————————————
    构建发动机
    构建轨道舱
    构建逃逸塔
    我的发动机
    发射
    
    

你可能感兴趣的:(设计模型,设计模式,java,大数据,编程语言,docker)