黑马程序员技术交流社区

标题: 装饰者设计模式 [打印本页]

作者: zhouyan19901008    时间: 2018-12-27 17:08
标题: 装饰者设计模式
本帖最后由 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();
    }
}     






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2