有些类被final修饰的类,想继承进行方法的扩充,但却不能被继承。
有些类想使用它的方法,但是却又不想继承,
这两种情况就是装饰者的应用场景:
本质就是将该类,成员变量的方式实现调用方法,并进行补充
代码实现:
interface Factory{
String productFunction();
}
//基础类实现该接口,返回“商品”的字符串
final class BaseFactory implements Factory{
@Override
public String productFunction() {
return "商品";
}
}
//对象适配器,继承对外的接口,定义一个成员功能接口,调用成员功能类的方法
abstract class Decoration implements Factory{
private Factory factory;
//定义构造方法,为Factory 赋初值
public Decoration(Factory factory) {
this.factory = factory;
}
@Override
public String productFunction() {
return factory.productFunction();
}
}
//装饰者实现类继承适配器类,重写方法
class Decorationimpl extends Decoration{
public Decorationimpl(Factory factory) {
super(factory);
}
@Override
public String productFunction() {
return "最具创意的"+super.productFunction();
}
}
class OtherDecorationimpl extends Decoration{
public OtherDecorationimpl(Factory factory) {
super(factory);
}
@Override
public String productFunction() {
return "其他的修饰"+super.productFunction();
}
}
public class Decorator {
public static void main(String[] args) {
BaseFactory factory = new BaseFactory();
Decorationimpl iDecorationimpl = new Decorationimpl(factory);
String resultString = iDecorationimpl.productFunction();
OtherDecorationimpl iOtherDecorationimpl = new OtherDecorationimpl(factory);
String resultString2 = iOtherDecorationimpl.productFunction();
System.out.println(resultString);
System.out.println(resultString2);
}
}