装饰模式作用
在不改变原来类,也不使用继承的基础上增强类的某个功能!!
装饰者设计模式的4个基本步骤
- 装饰类和被装饰类必须实现相同的接口
- 在装饰类中必须传入被装饰类的引用
- 在装饰类中对需要扩展的方法进行扩展
- 在装饰类中对不需要扩展的方法调用被装饰类中的同名方法
/**
* 装饰类和被装饰类需要实现的接口
*/
public interface Star {
/**
* 唱歌
*/
void sing();
/**
* 跳舞
*/
void dance();
}
/**
* 原有类,被装饰类,需要实现star接口
*/
public class LiuDeHua implements Star{
public void sing(){
System.out.println("啊哈,给我一杯忘情水...");
}
public void dance(){
System.out.println("蹦恰恰...蹦恰恰...");
}
}
/**
* 装饰类,也需要实现Star接口
*/
public class LiuDeHuaWrapper implements Star {
private LiuDeHua ldh;
public LiuDeHuaWrapper(LiuDeHua ldh){
this.ldh = ldh;
}
@Override
public void sing() {
System.out.println("唱歌前喝口水...");
ldh.sing();
System.out.println("唱歌后吃个糖...");
}
@Override
public void dance() {
ldh.dance();
}
}
public class TestDemo {
public static void main(String[] args) {
//1.创建一个被装饰类对象
LiuDeHua ldh = new LiuDeHua();
//2.创建一个装饰类对象
LiuDeHuaWrapper wrapper = new LiuDeHuaWrapper(ldh);
//3.调用方法
wrapper.sing();
wrapper.dance();
}
}