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

    • 本质与使用场景

    public interface AirShipBuilder {
    
        Engine builderEngine();
        OrbitalModule builderOrbitalModule();
        EscapeTower  builderEscapeTower();
    
    }
    
    public class SxtAirShipBuilder implements AirShipBuilder{  //StringBuilder,以后学习XML解析中,JDOM库中的类:DomBuilder,SaxBuilder
    
        @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("尚学堂牌逃逸塔");
        } 
    
    }
    飞船Builder接口及其实现类
    public interface AirShipDirector {
        
        AirShip directAirShip();
    }
    
    public class SxtAirShipDirector implements AirShipDirector{
    
        private AirShipBuilder builder;
            
        public SxtAirShipDirector(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;
        }
    
    }
    飞船组装Director接口及其实现
    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) {
            super();
            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) {
            super();
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    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;
        }
    }
    飞船类
    public class Client {
        
        public static void main(String[] args) {
            AirShipDirector director = new SxtAirShipDirector(new SxtAirShipBuilder());
            AirShip ship = director.directAirShip();
            System.out.println(ship.getEngine().getName());
            
            ship.launch();
        }
    }
    调用
  • 相关阅读:
    .net core获取数据库连接 抛出The type initializer to throw an exception
    解决本地Bootstrap字体图标不可见的问题
    Bootstrap 遮罩插件jquery.mloading
    oracle 数据库触发器,插入更新时间戳
    入门wpf—— 3、样式
    VisualStudio 连接 MySql 实现增删查改
    Bootstrap-table 使用总结,和其参数说明
    oracle数据库 TIMESTAMP(6)时间戳类型
    3.xadmin配置
    2.Model设计
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7466216.html
Copyright © 2011-2022 走看看