【Java设计模式】- 装饰器模式
来源:互联网 发布:mysql面试题及答案 编辑:程序博客网 时间:2024/06/18 15:08
概述
装饰器模式:可以动态的为运行时的类添加行为。相比继承而言,继承是直接对某个类的行为进行扩展而装饰器模式是对某个对象进行扩展。
原理:增加一个修饰类去实现被修饰类相同的接口,同时接收一个被修饰类的实例,并在修饰类中用自己的方法去包裹被修饰类的方法。
经常使用的Collections的synchronizedList(List<T> list)等方法就是使用了装饰器模式。
简单实现
说明:
- Conponent接口:被修饰类的接口。
- ConcreateConponent:被修饰类的具体实现。
- Decorator:装饰器实现。
Conponent:
只有一个方法
public interface Conponent {void conponentMethod();}ConcreateConponent:
具体实现
Decorator:
public class ConcreateConponent implements Conponent {@Overridepublic void conponentMethod() {System.out.println("the original conponent method run");}}
Decorator:
实现了Conponent接口从而拥有了和Conponent的实例一样的行为
接收一个Conponent的实例并用新的方法去包裹原来的方法。
这里的实现在conponentMethod执行之前和之后做了一个控制台输出,同时将该方法用一个互斥锁同步,使得conponentMethod方法线程安全。
public class Decorator implements Conponent {private Conponent source;private Object mutex = new Object();public Decorator(Conponent source) {this.source = source;}@Overridepublic void conponentMethod() {synchronized (mutex) {System.out.println("do something before method run");source.conponentMethod();System.out.println("do something after method run");}}}测试:
public class Test {public static void main(String[] args) {Conponent source = new ConcreateConponent();Decorator decorator = new Decorator(source);decorator.conponentMethod();}}输出:
do something before method runthe original conponent method rundo something after method run
阅读全文
0 0
- Java 装饰器设计模式
- java设计模式:装饰器模式[Decorator]
- java设计模式:装饰器模式[Decorator]
- java设计模式---装饰器模式
- java设计模式---装饰器模式
- Java设计模式之装饰器模式
- java设计模式之装饰器模式
- Java设计模式 - 装饰器模式
- java 策略设计模式 装饰器模式
- java设计模式--装饰器模式
- Java设计模式之装饰器模式
- Java设计模式之装饰器模式
- Java设计模式12:装饰器模式
- Java设计模式-装饰器模式
- java设计模式之装饰器模式
- 【Java设计模式】- 装饰器模式
- Java 设计模式_装饰器模式
- java模式设计之装饰器模式
- Java CRC校验和算法Demo
- 关于java.util.ConcurrentModificationException异常
- 持续集成&(Gitlab部署)
- 5招看清房龄真面目 不再谈“老”色变!
- STL源码剖析读书笔记6
- 【Java设计模式】- 装饰器模式
- 设计模式-观察者模式
- 查询oracle 序列
- Spring中映射Mongodb中注解的解释
- Android-->全面详解Git和Github的使用
- 接口与抽象类
- mybatis入门基础(四)----输入映射和输出映射
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
- 使用jenkins进行一键式部署项目