装饰模式

一、装饰模式:

  装饰模式比继承要灵活。避免了继承体系臃肿。

  而且降低了类于类之间的关系。

 

  装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。

  所以装饰类和被装饰类通常是都属于一个体系中的。

二、代码实现:

 1)接口:

/**
 * @description:程序员接口,默认实现编程方法;
 * @author: Mr.Yu
 **/
public interface Programmer {
    void programme();
}

2)需要加强的类:

/**
 * @description:詹姆斯·高斯林是一个程序员;
 * @author: Mr.Yu
 **/
public class Lin implements Programmer{
    @Override
    public void programme() {
        System.out.println("我是詹姆斯·高斯林,我是一个编程大叔;");
    }
}

3)装饰类

/**
 * @description:装饰类
 * @author: Mr.Yu
 **/
public class Derector implements Programmer {
    private Programmer programmer;

    public Derector(Programmer programmer) {
        this.programmer = programmer;
    }

    @Override
    public void programme() {
        programmer.programme();
        // 添加功能;
    }
}

4)加强功能1:

public class FatherDerector extends Derector {
    public FatherDerector(Programmer programmer) {
        super(programmer);
    }

    @Override
    public void programme() {
        super.programme();
        // 添加功能
        System.out.println("我还是孩子他爸;");
    }
}

5)加强功能2:

public class SwimmingDerector extends Derector {
    public SwimmingDerector(Programmer programmer) {
        super(programmer);
    }

    @Override
    public void programme() {
        super.programme();
        // 添加功能
        System.out.println("我还是一个游泳选手,反正我是信了;");
    }
}

6)测试:

public class Test {
    public static void main(String[] args) {
        Programmer lin = new Lin();

        FatherDerector fatherDerector = new FatherDerector(lin);
        SwimmingDerector swimmingDerector = new SwimmingDerector(lin);

        fatherDerector.programme();
        swimmingDerector.programme();
    }
}

7)结果:

我是詹姆斯·高斯林,我是一个编程大叔;
我还是孩子他爸;
我是詹姆斯·高斯林,我是一个编程大叔;
我还是一个游泳选手,反正我是信了;

 

posted @ 2019-08-01 23:54  开拖拉机的拉风少年  阅读(128)  评论(0编辑  收藏  举报