第十六条:复合优先于继承

一、什么是复合

复合也可为称为装饰者模式,那么如何使用装饰者模式呢。

首先:创建被装饰接口
其次:创建被装饰类
然后:创建装饰类

那么我们就以装饰水果篮子为例。
装饰类就是: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()

二、使用继承的缺点
继承打破了封装性:因为如果子类继承超类,如果超类的方法有所改变,那么子类就可能会遭到破坏。
举例:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值