一、定义
装饰模式又称为包装模式,通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替代方案。
二、类图
工作过程:
先创建一个基本basecar,实现基本功能,如果要新增功能
抽象类负责
1、限制入参必须是car
2、设置要修饰的主角:Car
3、继承基本功能
装饰结果有两个,如果是飞,fly,则继承后,传入一个基本basecar,然后再show里除了获取基本basecar的功能,再额外添加fly功能即可
然后创建
三、代码
public interface Car {
void show();
}
public class BaseCar implements Car{
@Override
public void show() {
System.out.println("可以跑");
}
}
public abstract class CarDecorator implements Car{
private Car car;
public CarDecorator(Car car) {
this.car = car;
}
public Car getCar(){
return car;
}
}
装饰1
public class FlyCarDecorator extends CarDecorator{
public FlyCarDecorator(Car car) {
super(car);
}
@Override
public void show() {
this.getCar().show();
this.fly();
}
private void fly() {
System.out.println("会飞");
}
}
装饰2
public class SwimCarDecorator extends CarDecorator{
public SwimCarDecorator(Car car) {
super(car);
}
@Override
public void show() {
this.getCar().show();
this.swim();
}
private void swim() {
System.out.println("会水");
}
}
测试类
public class Main {
public static void main(String[] args) {
BaseCar car = new BaseCar();
CarDecorator carDecorator = new FlyCarDecorator(car);
carDecorator.show();
CarDecorator carDecorator1 = new SwimCarDecorator(carDecorator);
carDecorator1.show();
}
}
结果