如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
我们来看看这个问题:在已经实现的功能上如何再添加其他功能?如在一个类中有一个addUser方法,我们如何再实现这个逻辑之前加上其他逻辑!
实例代码:
//空的接口类 public interface Father { //nothing } //需要添加逻辑的源代码 public class UnChangeableClass implements Father { public void addUser() { //在下面代码之前添加其他逻辑 System.out.println("add user success"); } }
方法一: (硬编码实现)我们可以在这个类中直接添加其他代码:比如我们可以这样写
缺点:是需要改变已有代码,不灵活,代码量大
public class UnChangeableClass implementsFather { public void addUser() { otherFunction();//添加其他逻辑
System.out.println("add user success"); } public void otherFunction() { System.out.println("add other functions"); } }
方法二:(继承实现 is - a)我们可以再写一个类,让这个类继承上面的类,然后实现添加逻辑的功能, 在这个时候spring的配置就得改变为这个类
缺点:我们用了继承的方式,程序的耦合度提高,而且基本上每个有这样需求的类都得加一个新类,不灵活
public class Helper extends UnChangeableClass{ @Override public void addUser() { //添加其他方法 otherFunction(); //调用父类的方法 super.addUser(); } public void otherFunction() { System.out.println("add other functions"); } }
方法三:(组合实现 has a)我么重新写一个类,继承自该类的接口,让后组合这两个类--------其实这是一种java的静态代理
public class Helper2 implements Father { // 将委托类组合到代理类(通过构造方法) private UnChangeableClass target = null; public Helper2(UnChangeableClass target) { this.target = target; // TODO Auto-generated constructor stub } public void otherFunction() { // 添加的逻辑 System.out.println("Other funciton "); // 委托类的逻辑 target.addUser(); } }
测试方法
public class Test { public static void main(String [] args) { //委托类对象 UnChangeableClass target=new UnChangeableClass(); //代理类对象 Helper2 proxy =new Helper2(target); //执行代理类方法(实际是在代理类中组合了委托类了代理类添加的方法) proxy.otherFunction(); } }