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

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

    代码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());
        }
    }
    

      

  • 相关阅读:
    (原)试问那些不劳而获的人?
    (原)资源互换原则
    (原)关于与人沟通时的几个中文语法
    osgviewer读取dxf文件,拣选高亮功能小结
    qt的OSG视图中拣选对象事件消息
    1)OSG与QT单文档视图的结合
    三维渲染引擎设计与实践(八)
    三维渲染引擎设计与实践(七)
    三维渲染引擎设计与实践(六)
    三维渲染引擎设计与实践(五)
  • 原文地址:https://www.cnblogs.com/wuMing-dj/p/3359140.html
Copyright © 2011-2022 走看看