zoukankan      html  css  js  c++  java
  • 装饰者模式,最简单的代码

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

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

    新建一个接口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 }
  • 相关阅读:
    NOIP普及组2003经验总结
    Day6上午 DP练习题
    Day4 图论
    Day3 数据结构
    使用ettercap进行dns欺骗和获取目标浏览的图片
    flask入门
    攻防世界-web-unserialize3
    数据结构课设作业-----飞机订票系统
    bugku NaNNaNNaNNaN-Batman
    it's a test
  • 原文地址:https://www.cnblogs.com/houzhg/p/3508832.html
Copyright © 2011-2022 走看看