装饰者本质是JAVA继承的一种变种,可以理解为加强的extends
第一步,写个抽象类和继承类
public abstract class MySource {
abstract void operate();
}
public class MySourceImpl extends MySource{
@Override
void operate() {
System.err.println("我是具体实现类");
}
}
第二步,再来一个继承类,不过是没有实现的,里面要放最开始抽象父类这个属性,通过构造注入留个后门装载上面正真的实现类
public abstract class MyOtherSource extends MySource{
private MySource mySource=null;
public MyOtherSource(MySource mySource) {
this.mySource = mySource;
}
@Override
void operate() {
mySource.operate();
}
//新增几个原始父类没有的方法,再具体的子类实现它
abstract void stop();
}
第三步,实现上面步骤的实例
public class XOtherSourceImpl extends MyOtherSource{
public XOtherSourceImpl(MySource mySource) {
super(mySource);
}
@Override
void stop() {
System.err.println("X实现方法");
}
}
public class YOtherSourceImpl extends MyOtherSource{
public YOtherSourceImpl(MySource mySource) {
super(mySource);
}
@Override
void stop() {
System.err.println("Y实现方法");
}
}
场景实用类检测
public class Client {
public static void main(String[] args) {
MySource mySource = new MySourceImpl();
MyOtherSource otherSource = new XOtherSourceImpl(mySource);
otherSource.stop();//相当于在MySourceImpl 里面加了stop 扩展一样
otherSource.operate();
}
}
网友评论