装饰者模式

1.装饰者模式:

现在与一个父接口定义的两个方法:
car接口:drive,sit
JeepCAR implement car:覆写方法:drivre(吉普车自己 的开车),sit(吉普车自己的坐)
XqCar implement car:覆写方法:drive(小汽车自己的开车),sit(小汽车自己的坐)
TankCar implement car:覆写方法:drive(坦克车自己的开车)。sit(坦克车自己的坐)
新增方法:添加太阳能
SunJeepCar extends JeepCar:覆写方法,保留父类方法,添加太阳能
public class SunJeepCar extends JeepCar {
@Override
public void drive() {
super.drive();
System.out.println(“添加太阳能动力。。。”);
}
SunXqCar extends XqCar:覆写方法,保留父类方法,添加太阳能
SunTankCar extends TankCar:覆写方法,保留父类方法,添加太阳能

再新增方法:添加按摩浴缸
YgJeepCar extends SunJeepCar:覆写方法,能保留父类的方法,添加按摩浴缸
YgSunXqCar extends SunXqCar:覆写方法,能保留父类的方法,添加按摩浴缸
YgSunTankCar extends SunTankCar:覆写方法,能保留父类的方法,添加按摩浴缸

假如以前我们在使用按摩浴缸的功能的时候,我们就必须是:以JeepCar为例子:
实现Car接口,覆写方法:JeepCar
继承JeepCar,添加JeepCar的太阳能功能:SunJeepCar
继承SunJeepCar,添加SunJeepCar功能:YgSunJeepCar
YgSunJeepCar ygSunJeepCar=new YgSunJeepCar();
ygSunJeepCar.方法(此时执行的是原有的功能,太阳能,浴缸)
因此就有一个问题,这样写子类太多了,需要一个方法就继承一个类,会有很多子类,不利于管理和扩展,太死板了,因此我们引入了装饰着模式:

装饰者模式:解决类功能扩展问题。
1.装饰类需要引入原始的基本功能,所以通常装饰类是没有无参数构造器的,
2.装饰者和原始功能应当处于同一体系
3.组合原始的功能和新增的功能
装饰类:太阳能功能
public class Sundec implement Car{
private XxxCar xxxcar;
public SunDec(XxxCar xxxcar){ //引入原始的car功能
this.car=car;
}
@Override
public void drive(){
car.drive();
System.out.println(“新增太阳能功能。。。”);//添加新的功能
}
@Override
public void sit() {
car.sit();
}
}

以JeepCar添加太阳能功能为例子:
先有JeepCar: JeepCar jeepCar=new JeepCar();
装饰太阳能功能:SunDec sundec=new Sundec(jeepCar);。
sundec.方法,就有原来的方法和新增的方法
ps:给jeepCar装饰了一个太阳能功能,此时注意:这两个类是处于同一体系的,例如JeepCar是实现了Car接口,装饰者也是实现了Car接口,这才是同一体系的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值