A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouyan19901008 初级黑马   /  2018-12-27 17:08  /  721 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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();
    }
}     

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马