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


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

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

    新建一个接口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 }
  • 相关阅读:
    CSS 文档流布局以及盒子模型
    CSS样式继承和样式权重
    CSS选择器餐厅练习
    node.js读写json文件
    C#单例模式的2种实现方式,Lazy模式和双检锁模式
    The Entity Framework provider type 'MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.18.0,
    mysql主从配置
    nginx 限制ip并发数,nginx限制IP连接数的范例参考
    certbot 调用cloudflare api申请证书
    proxy_pass url 反向代理的坑
  • 原文地址:https://www.cnblogs.com/houzhg/p/3508832.html
Copyright © 2020-2023  润新知