zoukankan      html  css  js  c++  java
  • 秒懂设计模式--装饰者模式

    对已有的业务逻辑进一步的封装,使其增加额外的功能,如Java中的IO流就使用了装饰者模式,用户在使用的时候,可以任意组装,达到自己想要的效果。 举个栗子,我想吃三明治,首先我需要一根大大的香肠,我喜欢吃奶油,在香肠上面加一点奶油,再放一点蔬菜,最后再用两片面包夹一下,很丰盛的一顿午饭,营养又健康。(ps:不知道上海哪里有卖好吃的三明治的,求推荐~)那我们应该怎么来写代码呢? 首先,我们需要写一个Food类,让其他所有食物都来继承这个类,看代码:

    public class Food {

       private String food_name;

       public Food() {
       }

       public Food(String food_name) {
           this.food_name = food_name;
       }

       public String make() {
           return food_name;
       };
    }

    代码很简单,我就不解释了,然后我们写几个子类继承它:

    //面包类
    public class Bread extends Food {

       private Food basic_food;

       public Bread(Food basic_food) {
           this.basic_food = basic_food;
       }

       public String make() {
           return basic_food.make()+"+面包";
       }
    }

    //奶油类
    public class Cream extends Food {

       private Food basic_food;

       public Cream(Food basic_food) {
           this.basic_food = basic_food;
       }

       public String make() {
           return basic_food.make()+"+奶油";
       }
    }

    //蔬菜类
    public class Vegetable extends Food {

       private Food basic_food;

       public Vegetable(Food basic_food) {
           this.basic_food = basic_food;
       }

       public String make() {
           return basic_food.make()+"+蔬菜";
       }

    }

    这几个类都是差不多的,构造方法传入一个Food类型的参数,然后在make方法中加入一些自己的逻辑,如果你还是看不懂为什么这么写,不急,你看看我的Test类是怎么写的,一看你就明白了

    public class Test {
       public static void main(String[] args) {
           Food food = new Bread(new Vegetable(new Cream(new Food("香肠"))));
           System.out.println(food.make());
       }
    }

    看到没有,一层一层封装,我们从里往外看:最里面我new了一个香肠,在香肠的外面我包裹了一层奶油,在奶油的外面我又加了一层蔬菜,最外面我放的是面包,是不是很形象,哈哈~ 这个设计模式简直跟现实生活中一摸一样,看懂了吗? 我们看看运行结果吧

     运行结果

    一个三明治就做好了~

  • 相关阅读:
    一天摄入多少蛋白质比较合理?
    给函数添加元数据(python)
    反转链表(C++实现)
    删除链表的中间节点(C++实现)
    在双向链表中删除倒数第K个链表节点(C++实现)
    在单链表中删除倒数第K个节点(C++实现)
    二叉树的创建及遍历(递归和非递归C++实现)
    删除排序数组中的重复项(C++实现)
    打印两个有序链表的公共部分(C++实现)
    用一个栈实现另一个栈的排序(C++实现)
  • 原文地址:https://www.cnblogs.com/wuwuyong/p/12470225.html
Copyright © 2011-2022 走看看