• 建造者模式


    在软件开发中,也会存在一些构造非常复杂的对象,这些对象拥有一系列的成员属性,这些成员属性有些是基本数据类型,有些是引用类型,总之就是一句话,这个对象的构建比较复杂。在这里我们就将复杂对象当做汽车,成员属性当做部件,对象的构建当做汽车的组合。对于用户而言我们总是希望我们在使用对象时足够简单,如果一个复杂的对象直接丢给用户,用户会是痛苦不堪的(给你一堆部件,你来组装成一辆汽车看看),除了这个构建的过程外,可能用户会忘记某些成员属性。所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关心该对象所包含的额属性和组建方式,这就是建造者模式的设计动机。

    代码1:产品

    public class Meal {
        private String food;
        private String drink;
    
        public String getFood() {
            return food;
        }
    
        public void setFood(String food) {
            this.food = food;
        }
    
        public String getDrink() {
            return drink;
        }
    
        public void setDrink(String drink) {
            this.drink = drink;
        }
    }
    

    代码2:建造者

    public abstract class MealBuilder {
        Meal meal = new Meal();
        
        public abstract void buildFood();
        
        public abstract void buildDrink();
        
        public Meal getMeal(){
            return meal;
        }
    }
    
    public class MealA extends MealBuilder{
    
        public void buildDrink() {
            meal.setDrink("一杯可乐");
        }
    
        public void buildFood() {
            meal.setFood("一盒薯条");
        }
    
    }
    
    public class MealB extends MealBuilder{
    
        public void buildDrink() {
            meal.setDrink("一杯柠檬果汁");
        }
    
        public void buildFood() {
            meal.setFood("三个鸡翅");
        }
    
    }
    

    代码3:指挥官

    public class KFCWaiter {
        private MealBuilder mealBuilder;
        
        public void setMealBuilder(MealBuilder mealBuilder) {
            this.mealBuilder = mealBuilder;
        }
    
        public Meal construct(){
            //准备食物
            mealBuilder.buildFood();
            //准备饮料
            mealBuilder.buildDrink();
            
            //准备完毕,返回一个完整的套餐给客户
            return mealBuilder.getMeal();
        }
    }
    

    代码4:客户端代码

    public class Client {
        public static void main(String[] args) {
            //服务员
            KFCWaiter waiter = new KFCWaiter();
            //套餐A
            MealA a = new MealA();
            //服务员准备套餐A
            waiter.setMealBuilder(a);
            //获得套餐
            Meal mealA = waiter.construct();
            
            System.out.print("套餐A的组成部分:");
            System.out.println(mealA.getFood()+"---"+mealA.getDrink());
        }
    }
    

      

  • 相关阅读:
    Apache Cassandra 4.0新特性介绍
    NoSQLBench压测工具入门教程
    赵洋:深入了解Materialized View
    PHP与ECMAScript_1_变量与常量
    HTTP_5_通信数据转发程序:代理、网关、隧道
    HTTP_4_返回结果的HTTP状态码
    HTTP_3_HTTP报文
    HTTP_2_HTTP协议概要
    HTTP_1_Web及网络基础
    一个完整的产品设计流程——家庭安全管家
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3359140.html
Copyright © 2020-2023  润新知