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

    Waiter并不亲自沏茶泡咖啡,而是在内部使用builder来做。

    package com.test.pattern.builder;
    
    //待构建产品
    class StarBucks {
        private String size;
        private String drink;
        
        public void setSize(String size) {
            this.size=size;
        }
        
        public void setDrink(String drink) {
            this.drink=drink;
        }
    }
    
    //抽象builder
    abstract class StarBucksBuilder {
        protected StarBucks starbucks;
        
        public StarBucks getStarBucks() {
            return starbucks;
        }
        
        public void createStarBucks() {
            starbucks = new StarBucks();
            System.out.println("one drink is created");
        }
        
        public abstract void buildSize();
        public abstract void buildDrink();
    }
    
    //泡茶builder
    class TeaBuilder extends StarBucksBuilder {
    
        @Override
        public void buildSize() {
            // TODO Auto-generated method stub
            starbucks.setSize("medium");
            System.out.println("build medium size");
        }
    
        @Override
        public void buildDrink() {
            // TODO Auto-generated method stub
            starbucks.setDrink("tea");
            System.out.println("build tea");
        }
    }
    
    //泡咖啡builder
    class CoffeeBuilder extends StarBucksBuilder {
    
        @Override
        public void buildSize() {
            // TODO Auto-generated method stub
            starbucks.setSize("medium");
            System.out.println("medium size");
        }
    
        @Override
        public void buildDrink() {
            // TODO Auto-generated method stub
            starbucks.setDrink("coffee");
            System.out.println("build coffee");
        }
    }
    
    //指导如何封装builder
    class Waiter {
        private StarBucksBuilder starBucksBuilder;
    
        public void setStarBucksBuilder(StarBucksBuilder starBucksBuilder) {
            this.starBucksBuilder = starBucksBuilder;
        }
        
        public StarBucks getStarBucksDrink() {
            return starBucksBuilder.getStarBucks();
        }
        
        public void constructStarBucks() {
            starBucksBuilder.createStarBucks();
            starBucksBuilder.buildDrink();
            starBucksBuilder.buildSize();
        }
    }
    //客户
    public class BuilderTest {
        public static void main(String[] args) {
            Waiter waiter = new Waiter();
            StarBucksBuilder coffeeBuilder = new CoffeeBuilder();
            
            //用builder泡咖啡
            waiter.setStarBucksBuilder(coffeeBuilder);
            waiter.constructStarBucks();
            
            //取到饮料
            StarBucks drink = waiter.getStarBucksDrink();
        }
    }
  • 相关阅读:
    Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容
    Flagger on ASM·基于Mixerless Telemetry实现渐进式灰度发布系列 1 遥测数据
    HTML特殊符号整理
    jq代替jsdom操作部分
    js操作html的基本方法
    使用for循环疑难问题
    使用盒子定位布局时margin和padding使用
    四使用浮动div布局
    解决Junit单元测试 找不到类 ----指定Java Build Path
    微信服务号申请、认证、认证后申请商家支付接口
  • 原文地址:https://www.cnblogs.com/heben/p/5773038.html
Copyright © 2011-2022 走看看