说明:今天忽然想起好久之前学习的装饰者设计模式,总结了一下。原理就是:如果一个类已经被包装好了,我们想对这个类的某个方法在增加一些新的内容。
如何在不需要对原先包装好的类上进行增加呢??
分为三步:
1、已经实现某些方法的类继承一个接口。那我也需要去继承这个接口。
2、覆写这个接口的共同方法。(需要装饰的那个方法)
3、需要把原先包装好的类的实例传递进来。
下面是一个DEMO,以便于理解:
class DecratorCat implements ICat{ private ICat cat; public DecratorCat(ICat cat){ this.cat = cat; } @Override public void run() { //添加 自己的逻辑 System.out.println("小黑 抓住 老鼠 只用 了 3秒 时间 ..."); //调用 原 有的逻辑 cat.run(); } } // 被装饰者 class Cat implements ICat{ public void run(){ System.out.println("小黑的黑暗中奔跑 抓住了 一只 老鼠..."); } } interface ICat{ public void run(); }
// 2. 装饰设计模式 : 装饰者 和 被装饰者 // 用的时候, 要满足的条件: /* * 两个条件: * 第一个: * 装饰者和被装饰者 必须要实现同样的接口或者 有共同 父类 * 第二个: * 被装饰者 必须要 传递给 装饰者 --- 装饰者持有 对被装饰者的引用 */ @Test public void test2(){ DecratorCat cat = new DecratorCat(new Cat()); cat.run(); }