Decorator模式及其他相似的模式

简介:
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模式

  -- 见一个简单的Servlet容器

 

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



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

相关文章
|
JavaScript 前端开发
js对象的创建对象模式和继承模式(下)---继承模式
js对象的创建对象模式和继承模式(下)---继承模式
108 0
|
JavaScript 前端开发
js对象的创建对象模式和继承模式(上)---构建对象模式
js对象的创建对象模式和继承模式(上)---构建对象模式
136 0
|
设计模式 Java API
|
Java 数据库连接 数据库
|
设计模式 Java 关系型数据库
克隆羊问题:引出原型设计模式(Prototype模式)
克隆羊问题:引出原型设计模式(Prototype模式)
克隆羊问题:引出原型设计模式(Prototype模式)
|
存储 编解码
ES6新特性(8)之Decorator修饰器/二进制数组
ES6新特性(8)之Decorator修饰器/二进制数组
|
Java 数据库
包装模式就是这么简单啦
前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 前一篇已经讲解了代理模式了,今天要讲解的就是装饰模式啦~ 在看到FilterInputStream和FilterOutputStream时看到了之前常听见的装饰模式(对IO一定了解的同学可能都会知道那么一句话:在IO用得最多的就是装饰模式了)! 其实无论是代理模式还是装饰模式。
1276 0
|
C#
C#设计模式(19)——状态者模式(State Pattern)
原文:C#设计模式(19)——状态者模式(State Pattern) 一、引言   在上一篇文章介绍到可以使用状态者模式和观察者模式来解决中介者模式存在的问题,在本文中将首先通过一个银行账户的例子来解释状态者模式,通过这个例子使大家可以对状态者模式有一个清楚的认识,接着,再使用状态者模式来解决上一篇文章中提出的问题。
1091 0