装饰模式
一、装饰模式:
装饰模式比继承要灵活。避免了继承体系臃肿。
而且降低了类于类之间的关系。
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。
所以装饰类和被装饰类通常是都属于一个体系中的。
二、代码实现:
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)结果:
我是詹姆斯·高斯林,我是一个编程大叔;
我还是孩子他爸;
我是詹姆斯·高斯林,我是一个编程大叔;
我还是一个游泳选手,反正我是信了;