• 装饰者模式,最简单的代码


    装饰者模式,避免排列组合产生过多的子类,动态生成所需功能。

    举例,你需要一杯黄豆豆浆,但分很多种类,你要加糖的,加红枣的,加花生的... 这就罢了,我要加糖的加红枣的 或者 加糖的加花生的 或者 三者都加的,如果设计所有子类会产生很多,所以就有了装饰者模式。

    新建一个接口Soy,并定义抽象方法soyKind:

    1 public interface Soy
    2 {
    3     public String soyKind();
    4 }

    新疆一个类 SoyImpl,实现Soy接口,必须实现soyKind()方法。这个是被装饰者,以这个为基础。

     1 public class SoyImpl implements Soy
     2 {
     3     @Override
     4     public String soyKind()
     5     {
     6         // TODO Auto-generated method stub
     7         System.out.println("基本豆浆种类,比如说以黄豆为基本原料的");
     8         return "黄豆豆浆";
     9     }
    10 }

    新建一个类Date,Date(枣),加枣的黄豆豆浆。

     1 //加红枣的豆浆  red dates红枣的意思
     2 public class Date implements Soy
     3 {
     4     private Soy soy;
     5 
     6     public Date(Soy soy)
     7     {
     8         this.soy = soy;
     9     }
    10 
    11     @Override
    12     public String soyKind()
    13     {
    14         // TODO Auto-generated method stub
    15         return soy.soyKind() + "带红枣";
    16     }
    17 }

    新建一个类Sugar,加糖的黄豆豆浆。

     1 //加糖的豆浆 
     2 public class Sugar implements Soy
     3 {
     4     private Soy soy;
     5 
     6     public Sugar(Soy soy)
     7     {
     8         this.soy = soy;
     9     }
    10 
    11     @Override
    12     public String soyKind()
    13     {
    14         // TODO Auto-generated method stub
    15         return soy.soyKind() + "带糖";
    16     }
    17 }

    新建测试类

     1 public class Test
     2 {
     3     public static void main(String[] args)
     4     {
     5         Soy soy=new SoyImpl();
     6         Soy soy2=new Sugar(soy);
     7         Soy soy3=new Date(soy2);
     8         System.out.println(soy3.soyKind());
     9     }
    10 }
  • 相关阅读:
    1022. 从根到叶的二进制数之和
    剑指 Offer 54. 二叉搜索树的第k大节点
    枚举--百练2811--熄灯问题
    UVA 572 BFS 图论入门
    百练1088 DP+DFS 迷宫问题
    poj 1661 动态规划 拯救老鼠
    入坑动态规划!POJ 1458字符串最大公共子序列
    文件后缀批处理
    奇妙的算法--UVA 679(二叉树的编号)
    栈_uva514
  • 原文地址:https://www.cnblogs.com/houzhg/p/3508832.html
Copyright © 2020-2023  润新知