如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法
发布日期:2021-08-21 13:17:55 浏览次数:32 分类:技术文章

本文共 1587 字,大约阅读时间需要 5 分钟。

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

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/fjsnail/p/3495807.html

转载地址:https://blog.csdn.net/weixin_33720078/article/details/93686955 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Flutter视图基础简介--Widget、Element、RenderObject
下一篇:[HAOI2007]上升序列

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月03日 08时57分15秒