博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Decorator模式及其他相似的模式
阅读量:6368 次
发布时间:2019-06-23

本文共 2808 字,大约阅读时间需要 9 分钟。

Java代码  
  1. package com.whatsmars.tomcat.design.decorator;  
  2.   
  3. /** 
  4. * @author javahongxi 用户留言板处理的接口 
  5. */  
  6. public interface MessageBoardHandler {  
  7.     /** 
  8.     * @author javahongxi 用户可以利用函数留言 
  9.     */  
  10.     public String filter(String msg);  
  11. }  
  12.   
  13. package com.whatsmars.tomcat.design.decorator;  
  14.   
  15. /** 
  16. * @author javahongxi 用户留言板的具体实现 
  17. */  
  18. public class MessageBoard implements MessageBoardHandler {  
  19.   
  20.     public String filter(String msg) {  
  21.         return "留言板上的内容:" + msg;  
  22.     }  
  23. }  
  24.   
  25. package com.whatsmars.tomcat.design.decorator;  
  26.   
  27. /** 
  28. * @author javahongxi 装饰角色 
  29. */  
  30. public class MessageBoardDecorator implements MessageBoardHandler {  
  31.   
  32.     private MessageBoardHandler handler;  
  33.      public MessageBoardDecorator(MessageBoardHandler handler) {  
  34.          super();  
  35.          this.handler = handler;  
  36.        }  
  37.      public String filter(String msg) {  
  38.          return handler.filter(msg);  
  39.        }  
  40. }  
  41.   
  42. package com.whatsmars.tomcat.design.decorator;  
  43.   
  44. /** 
  45. * @author javahongxi 具体装饰角色,增加过滤掉HTML标签的功能 
  46. */  
  47. public class HtmlFilter extends MessageBoardDecorator {  
  48.   
  49.     public HtmlFilter(MessageBoardHandler handler) {  
  50.         super(handler);  
  51.     }  
  52.     public String filter(String content) {  
  53.         String temp = super.filter(content);  
  54.         temp += "^^过滤掉HTML标签!^^";  
  55.         return temp;  
  56.        }  
  57. }  
  58.   
  59. package com.whatsmars.tomcat.design.decorator;  
  60.   
  61. /** 
  62. * @author javahongxi 具体装饰角色,增加过滤掉政治敏感字眼的功能 
  63. */  
  64. public class SensitiveFilter extends MessageBoardDecorator {  
  65.   
  66.     public SensitiveFilter(MessageBoardHandler handler) {  
  67.         super(handler);  
  68.     }  
  69.     public String filter(String content) {  
  70.         String temp = super.filter(content);  
  71.         temp += "^^过滤掉政治敏感的字眼!^^";  
  72.         return temp;  
  73.     }  
  74. }  
  75.   
  76. package com.whatsmars.tomcat.design.decorator;  
  77.   
  78. /** 
  79. * @author javahongxi 客户端测试 
  80. */  
  81. public class Test {  
  82.   
  83.     public static void main(String[] args) {  
  84.         MessageBoardHandler mb = new MessageBoard();  
  85.         String content = mb.filter("一定要学好装饰模式!");  
  86.         System.out.println(content);  
  87.             
  88.         mb = new HtmlFilter(new SensitiveFilter(new MessageBoard()));  
  89.         content = mb.filter("一定要学好装饰模式!");  
  90.         System.out.println(content);  
  91.     }  
  92. }  
  93.   
  94. console:  
  95. 留言板上的内容:一定要学好装饰模式!  
  96. 留言板上的内容:一定要学好装饰模式!^^过滤掉政治敏感的字眼!^^^^过滤掉HTML标签!^^  

 

 Adapter模式

Java代码  
  1. package com.whatsmars.tomcat.design.adapter;  
  2.   
  3. /** 
  4.  * Created by shenhongxi on 16/4/14. 
  5.  */  
  6. public class Adaptee {  
  7.   
  8.     public void specificRequest() {  
  9.         System.out.println("specific request");  
  10.     }  
  11. }  
  12.   
  13. package com.whatsmars.tomcat.design.adapter;  
  14.   
  15. /** 
  16.  * Created by shenhongxi on 16/4/14. 
  17.  */  
  18. public interface Target {  
  19.   
  20.     public void request();  
  21. }  
  22.   
  23. package com.whatsmars.tomcat.design.adapter;  
  24.   
  25. /** 
  26.  * Created by shenhongxi on 16/4/14. 
  27.  */  
  28. public class Adapter implements Target {  
  29.   
  30.     Adaptee adaptee;  
  31.   
  32.     public void request() {  
  33.         adaptee.specificRequest();  
  34.     }  
  35. }  
  36.   
  37. package com.whatsmars.tomcat.design.adapter;  
  38.   
  39. /** 
  40.  * Created by shenhongxi on 16/4/14. 
  41.  */  
  42. public class Adapter2 extends Adaptee implements Target {  
  43.     // 对于我们不必要实现的方法可在Adaptee中作空实现  
  44.     public void request() {  
  45.         super.specificRequest();  
  46.     }  
  47. }  

  Facade模式

  -- 见

 

  个人认为上述三种模式可以统称Wrapper模式,熟练之后我们不必在意它们究竟属于何种设计模式,当然类的命名最好按具体的模式来。

原文链接:[http://wely.iteye.com/blog/2290854]

转载地址:http://mbgma.baihongyu.com/

你可能感兴趣的文章
javascript中的数据类型
查看>>
用vue快速开发app的脚手架工具
查看>>
紧跟 Java 节奏,单独拆分的 JavaFX 将缩短迭代周期
查看>>
ARM发布新CPU/GPU架构 优化支持移动VR
查看>>
Deploy Mysql
查看>>
ASP.NET MVC5请求管道和生命周期
查看>>
国家网信办开展网址导航专项治理:改变“唯竞价排名”顽疾
查看>>
福科软件联手农贸企业打造乡镇车销运作方案
查看>>
Hyper-V:无法打开虚拟机XXX,因为虚拟机监控程序未运行
查看>>
【小工匠聊Modbus】02-数据校验
查看>>
使用Vue踩过的坑
查看>>
为Cryengine而战,Crytek投入百万美元鼓励VR游戏开发
查看>>
陶瓷生产检测中的机器视觉技术
查看>>
Uber收购AI创企,将作为新设AI中央实验室核心
查看>>
张高兴的 UWP 开发笔记:手机状态栏 StatusBar
查看>>
openSUSE Tumbleweed 支持 Linux Kernel 4.20
查看>>
Veeam 宣布加入 HPE Complete 项目
查看>>
来“南京周”纽约站人文客厅,火柴全景让你用VR穿越回六朝古都
查看>>
2016《互联网周刊》年度人物候选人公示(8)
查看>>
阿里淘宝造物节上,无人超市“淘咖啡”首次揭开面纱
查看>>