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();
        }
    }
    调用
  • 相关阅读:
    Eclipse用法和技巧二:自动生成Main方法1
    java 基于JDK中的源码总结下String二
    700.Search in a Binary Search Tree
    722.Remove Comments
    95. Unique Binary Search Trees II(dfs经典题目)
    20.Valid Parentheses
    28.Implement strStr()
    888.Fair Candy Swap
    14.Longest Common Prefix
    234.Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/qingdaofu/p/7466216.html
Copyright © 2011-2022 走看看