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();
        }
    }
  • 相关阅读:
    记一次 css样式的使用
    Vue -- element
    Ubuntu系统 ,鼠标双击搜索框内容 ,内容会被自动删除
    MetInfo Password Reset Poisoning By Host Header Attack
    wechall writeup
    SQL常用语句
    PHP Tips
    PHP版本差异备忘录
    Docker入门
    JetBrains系列软件用法
  • 原文地址:https://www.cnblogs.com/heben/p/5773038.html
Copyright © 2011-2022 走看看