本帖最后由 zhouyan19901008 于 2018-12-27 17:10 编辑
装饰者设计模式
1. 需求分析
在实际开发中,有些类的方法并不能满足我们的需求,而且我们还不能修改其源代码。那么我们就想办法对类的方法进行增强。因此今天我们来阐述一下关于方法增强的方式. 此处主要讲解"装饰者设计模式"去实现方法增强
2. 实现方案
1. 继承: 子类继承父类,重写父类方法
缺点:
1. 子类必须获取父类的构造函数.
2. extends 位置很宝贵的
2. 装饰者设计模式
缺点: 需要额外创建一个类,才能实现对类的方法进行增强.
3. 动态代理
优点: 不需要额外的类, 动态的对类的方法进行增强.
3. 装饰者设计模式
实现步骤
1. 装饰者和被装饰者要实现相同的接口,或者继承同一个父类.
2. 装饰者必须有被装饰者的引用.
3. 对需要增强的方法进行增强
4. 对不需要增强的方法,调用原来的方法即可.
代码演示
1. 编写Car接口
package com.itheima.stat;
/**
*
*汽车接口
*/
public interface Car {
public void run();
public void stop();
}
2. 编写被装饰对象 QQCar .package com.itheima.stat;
public class QQCar implements Car {
@Override
public void run() {
System.out.println("QQ车慢悠悠的启动了~~~");
}
@Override
public void stop() {
System.out.println("QQ车刹车了~~~");
}
}
3. 编写装饰者FourS.
package com.itheima.stat;
/**
* 装饰者类:
*/
public class FourS implements Car {
private final Car car;
public FourS(Car car){
this.car = car;
}
//对需要增强的方法进行增强
public void run() {
System.out.println("弹射起步~~~");
}
//对不需要增强的方法,调用原来的方法即可.
public void stop() {
car.stop();
}
}
4. 编写测试类.
package com.itheima.stat;
public class Demo {
public static void main(String[] args) {
Car car = new QQCar();
// 增强run方法以后的汽车了
car = new FourS(car);
car.run();
car.stop();
}
}
|
|