如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法

我们来看看这个问题:在已经实现的功能上如何再添加其他功能?如在一个类中有一个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();
	}
	
}

 

 

 

 

 

 

 

posted @ 2013-12-28 21:29  Jackvin  阅读(402)  评论(0编辑  收藏  举报