设计模式(五) 装饰者模式

定义

装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。

装饰者模式的结构

装饰模式的角色和职责

  • 抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口(Car)。

    public interface Car {

    void run();

    void show();

    }

  • 具体组件角色:为抽象组件的实现类(FlyCar、SwinCarDecorator)。

    public class FlyCarDecorator extends CarDecorator {

    public FlyCarDecorator(Car car) {
    super(car);

    }

    @Override
    public void run() {

    }

    private void fly() {
    System.out.println("可以飞的车");
    }

    @Override
    public void show() {
    this.getCar().show();
    fly();
    }

    }

    public class SwimCarDecorator extends CarDecorator {

    public SwimCarDecorator(Car car) {
    super(car);
    }

    private void swim() {
    System.out.println("可以游的车");
    }

    @Override
    public void run() {

    }

    @Override
    public void show() {
    this.getCar().show();
    swim();
    }

    }

  • 抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口(CarDecorator)。

    public abstract class CarDecorator implements Car {

    private Car car;

    public CarDecorator(Car car) {
    this.car = car;
    }

    public abstract void show();

    public Car getCar() {
    return car;
    }

    public void setCar(Car car) {
    this.car = car;
    }
    }

  • 具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰(RunCar)。

    /被修饰的对象/
    public class RunCar implements Car {

    @Override
    public void run() {
    System.out.println("可以跑的车");
    }

    @Override
    public void show() {
    run();
    }

    }

  • Main方法

    public class Main {

    public static void main(String[] args) {
    Car car = new RunCar();
    CarDecorator flyCar = new FlyCarDecorator(car);
    CarDecorator swimCar = new SwimCarDecorator(flyCar);
    swimCar.show();
    }

    }

posted @ 2017-09-25 20:02  esileme  阅读(147)  评论(0)    收藏  举报