23种设计模式汇总讲解文档
汇总学习网址:Java23种设计模式-学习汇总
装饰模式
定义1:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
// Actor.java
package T17;
/**
* @author YangCourage
* 定义接口
*/
public interface Actor {
// 演员需要表演
public void show();
}
// ActorTom.java
// 实际的实现类,被装饰的对象
/**
*
*/
package T17;
/**
* @author YangCourage
* 演员Tom
*/
public class ActorTom implements Actor {
/* (non-Javadoc)
* @see T12.Actor#show()
*/
@Override
public void show() {
System.out.println("Tom猫开始演奏音乐");
}
}
/**
* ActorTom1.java
*/
package T17;
/**
* @author YangCourage
*
*/
public class ActorTom1 implements Actor {
// 装饰的对象
Actor actor = null;
public ActorTom1(Actor actor){
// 指定代理对象
this.actor = actor;
}
@Override
public void show() {
System.out.println("Tom学会了调整钢琴,演奏前调整钢琴");
actor.show();
}
}
/**
* ActorTom2.java
*/
package T17;
/**
* @author YangCourage
*
*/
public class ActorTom2 implements Actor {
// 装饰的对象
Actor actor = null;
public ActorTom2(Actor actor){
// 指定代理对象
this.actor = actor;
}
@Override
public void show() {
System.out.println("Tom擦了擦钢琴");
actor.show();
}
}
// Main.java
package T17;
/**
* @author YangCourage
*
*/
public class Main {
public static void main(String[] args) {
// 被装饰的类
Actor actor = new ActorTom();
// 装饰类1
actor = (Actor) new ActorTom1(actor);
// 装饰类2
actor = (Actor) new ActorTom2(actor);
actor.show();
}
}
运行的装饰结果
Tom擦了擦钢琴
Tom学会了调整钢琴,演奏前调整钢琴
Tom猫开始演奏音乐
《设计模式之禅》秦小波 ↩︎