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();
        }
    }
  • 相关阅读:
    asp.net core-15.Individual authentication 模板
    Thread,Task,async/await,IAsyncResult
    asp.net core-14.JWT认证授权 生成 JWT Token
    asp.net core-13.Cookie-based认证实现
    asp.net core-12.dotnet watch run 和attach到进程调试
    asp.net core-11.WebHost的配置
    asp.net core-10.Http请求的处理过程
    asp.net core-9.依赖注入的使用
    asp.net core-8. 配置的热更新
    asp.net core-7.在Core Mvc中使用Options
  • 原文地址:https://www.cnblogs.com/heben/p/5773038.html
Copyright © 2011-2022 走看看