`
ghostjohn
  • 浏览: 18306 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

java 模式之修饰模式

 
阅读更多

修饰模式

作用:动态的在对象上增加功能。虽然同样的功能也可以通过子类来实现,但是用修饰模式效果要好。

例子:获取留言版上某个用户的留言信息。

public interface MessageBoardHandler { public String filter(String message); }


 

获取信息的实现类:MessageBoard

public class MessageBoard implements MessageBoardHandler { public String filter(String message) { return "message:"+message; } }


 

然后,由于业务需要,得将信息里有关Html标签的内容和不和谐的内容去掉。正常情况下我们有两种做法(1)修改MessageBoard类,但是可能还会有些地方不需要这两种过滤条件(2)通过新增子类,可是呢多个过滤条件得新增多个子类,而且如果还需要考滤过滤次序的问题话,子类的数目就会以几何级的基数暴长。呵呵。

所以,还得用修饰模式:

1)        抽象构件角色(Component):定义一个抽象接口,以规范准备接收附加责任的对象。

2)        具体构件角色(Concrete Component):这是被装饰者,定义一个将要被装饰增加功能的类。

3)        装饰角色(Decorator):持有一个构件对象的实例,并定义了抽象构件定义的接口。

4)        具体装饰角色(Concrete Decorator):负责给构件添加增加的功能。

/** * @author leno 装饰角色 */ public class MessageBoardDecorator implements MessageBoardHandler { private MessageBoardHandler handler; public MessageBoardDecorator(MessageBoardHandler handler) { super(); this.handler = handler; } public String filter(String msg) { return handler.filter(msg); } }


 

/** * @author leno 具体装饰角色,增加过滤掉HTML标签的功能 */ public class HtmlFilter extends MessageBoardDecorator { public HtmlFilter(MessageBoardHandler handler) { super(handler); } public String filter(String content) { String temp = super.filter(content); temp += "^^过滤掉HTML标签!^^"; return temp; } }

 

/** * @author leno 具体装饰角色,增加过滤掉政治敏感字眼的功能 */ public class SensitiveFilter extends MessageBoardDecorator { public SensitiveFilter(MessageBoardHandler handler) { super(handler); } public String filter(String content) { String temp = super.filter(content); temp += "^^过滤掉政治敏感的字眼!^^"; return temp; } }


 

public class Test { public static void main(String[] args) { MessageBoardHandler mb = new MessageBoard(); String content = mb.filter("一定要学好装饰模式!"); System.out.println(content); mb = new HtmlFilter(new SensitiveFilter(new MessageBoard())); content = mb.filter("一定要学好装饰模式!"); System.out.println(content); }


 

 

 

分享到:
评论

相关推荐

    Java设计模式之修饰模式篇(1).pdf

    在Java中,修饰模式通常涉及到创建一个新的类,这个新类会包装(修饰)另一个类的对象,也就是所谓的"真实对象"或"基础对象"。修饰类与被修饰类通常有相同的接口,这样客户端代码可以透明地使用修饰后的对象,而不必...

    Java设计模式之修饰模式篇(1).docx

    修饰模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的原始代码。这种模式在Java等面向对象语言中广泛应用,提供了比继承更加灵活的扩展性。 在Java中,...

    五种常用的Java设计模式

    单例模式主要有两种实现方式,第一种方式是将自身的实例对象设置为一个属性,并加上Static和final修饰符,第二种方式是使用synchronized关键字来保证线程安全。 工厂模式 工厂模式是一种创建型设计模式,主要功能...

    java修饰符

    - **用途**:`abstract`用于定义接口规范和模板方法模式,强制子类遵循特定的行为模式,是面向对象编程的重要工具之一。 通过合理使用Java的修饰符,开发者可以构建出结构清晰、安全可靠且易于维护的代码。访问控制...

    史上最强java4大模块33种设计模式

    本资源“史上最强java4大模块33种设计模式”旨在为初学者提供全面而深入的学习材料,帮助他们掌握Java的核心知识并了解如何在实际项目中应用设计模式。 首先,Java的四大模块主要包括: 1. **基础模块**:这是Java...

    java面试题,技术面试与设计模式

    Java作为世界上最受欢迎的编程语言之一,其面试题和设计模式是每位Java开发者都需要掌握的核心知识。下面我们将深入探讨这些主题,以帮助IT工作者在面试中脱颖而出,并提升自己的技术水平。 一、Java面试题 1. ...

    java设计模式基础

    * Lesson 8 [修饰模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson8) * Lesson 9 [代理模式](https://github.com/AlfredTheBest/Design-Pattern/tree/master/lesson9) * Lesson 10 [工厂...

    Java的单例设计模式

    单例设计模式是软件设计模式中的经典模式之一,它的核心思想是确保一个类只有一个实例,并提供全局访问点。这种模式在Java中广泛应用于系统配置、线程池、缓存管理等场景,因为这些场景通常只需要一个共享的全局对象...

    关于Java中各种修饰符与访问修饰符的说明

    Java是一种面向对象的编程语言,其中修饰符和访问修饰符是控制代码访问权限和行为的重要元素。本篇文章将详细介绍Java中的各种修饰符和访问修饰符。 1. **类的访问修饰符** - `public`:任何类都可以访问声明为`...

    Java模式匹配demo

    Java模式匹配是编程中一种常见的技术,主要用于字符串的查找、替换和验证等操作。它主要依赖于`java.util.regex`包中的类和接口,如`Pattern`、`Matcher`等。在Java中,模式匹配主要涉及到正则表达式,这是一种强大...

    设计模式java实现之单例模式1

    这种模式在Java编程中非常常见,尤其是在需要全局共享资源或控制并发访问时。以下是对单例模式在Java中实现的详细讨论: 1. **基础版**: 这是最简单的单例模式实现,也称为懒汉式(Lazy Initialization)。在基础...

    Java与模式(PDF)

    《Java与模式》是一本深度探讨Java编程语言与设计模式结合使用的专业书籍。设计模式是软件工程中的宝贵经验总结,是解决常见问题的有效方法。在Java这个广泛使用的面向对象编程语言中,理解并灵活运用设计模式是提升...

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】

    java设计模式【之】装饰者模式【源码】【场景:煎饼果子+肠+蛋】 * 测试类【之】煎饼果子来一套 * * 不改变原有对象的基础上,强化已经存在的功能 * 被装饰者与装饰者实现同一个抽象或接口 * 装饰后,最终还是...

    java 单例模式(饿汉模式与懒汉模式).docx

    在饿汉模式中,`INSTANCE` 被 `final` 修饰,确保其不可变性,同时也防止了子类对其进行继承。由于实例在类加载时已经创建,所以饿汉模式适用于那些在程序启动后就需要立即使用的单例对象。 2. **懒汉模式**: - ...

    【ASP.NET编程知识】java 单例模式(饿汉模式与懒汉模式).docx

    Java 单例模式是一种常用的软件设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在 ASP.NET 编程中同样适用,尤其是在需要频繁创建和销毁对象时,如与数据库交互的 JDBC 连接管理。...

    java多线程设计模式

    - 工作线程池是多线程编程中最常见的模式之一,通过预先创建一定数量的工作线程,将任务提交给线程池进行异步处理。 - 使用`ExecutorService`接口和其实现类如`ThreadPoolExecutor`可以方便地实现线程池。 4. **...

    浅谈Java中单例设计模式之构造方法私有化.pdf

    "浅谈Java中单例设计模式之构造方法私有化" 单例设计模式是 Java 中一种常用的设计模式,核心思想是将类的构造方法私有化,以控制实例化对象的产生。这种模式可以确保在程序中只有一个实例化对象存在,这对控制对象...

    设计模式的Java实现

    在Java中,可以使用`static`修饰的内部类或`synchronized`方法来实现。 2. **工厂方法模式**:定义一个创建对象的接口,但让子类决定实例化哪一个类。Java中,通常通过抽象工厂类和具体实现类来实现。 3. **抽象...

    JAVA设计模式之单例模式(完整版)[归类].pdf

    **Java设计模式:单例模式详解** 单例模式是软件设计中的一种常见模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在控制资源的共享、提高性能或协调多个组件之间的交互等方面有着广泛的应用。 ##...

    Java单例模式.pdf

    Java单例模式是设计模式中的一种,在软件开发中扮演着重要的角色。单例模式的目的是保证一个类仅有一个实例,并且提供一个全局访问点。在Java中实现单例模式有多种方法,主要包括懒汉式、饿汉式、注册式(使用容器)...

Global site tag (gtag.js) - Google Analytics