一、什么是复合
复合也可为称为装饰者模式,那么如何使用装饰者模式呢。
首先:创建被装饰接口
其次:创建被装饰类
然后:创建装饰类
那么我们就以装饰水果篮子为例。
装饰类就是:Apple、Orange等水果 被装饰类就是:Basket
首先创建被装饰接口(Basket):
<span style="font-size:18px;">public interface Basket {
//该方法展示篮子里面有什么
void show();
}
</span>
其次:创建被装饰类(直接继承接口,重写方法)<span style="font-size:18px;">public class EmptyBasket implements Basket {
@Override
public void show() {
System.out.println("I am a basket");
}
}</span>
然后:创建装饰类以Apple为例public class AppleBasket implements Basket {
//接收上一个装饰类
private Basket basket;
public AppleBasket(Basket basket) {
// TODO Auto-generated constructor stub
this.basket = basket;
}
@Override
public void show() {
// TODO Auto-generated method stub
//调用上一个装饰类的方法
basket.show();
//本身的装饰
System.out.println("I am apple");
}
}
使用:Basket basket = new AppleBasket(new OrangeBasket(new EmptyBasket()));
basket.show()
继承打破了封装性:因为如果子类继承超类,如果超类的方法有所改变,那么子类就可能会遭到破坏。
举例: