zoukankan      html  css  js  c++  java
  • 如何实现在已有代码之后添加逻辑之继承,组合(静态代理)实现方法

    我们来看看这个问题:在已经实现的功能上如何再添加其他功能?如在一个类中有一个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();
    	}
    	
    }
    
  • 相关阅读:
    RF简介
    ADB & FASTBOOT COMMAND ON WINDOWS
    通过Mac电脑安装apk 和 ipa到安卓和苹果手机
    Mac搭建移动端自动化环境遇到的node安装失败的坑与解决方法
    Git 连接pycharm
    Appium环境搭建和命令
    穿戴设备(智能手表)移动端测试浅谈1
    IOS UIImageView的contentMode属性
    IOS OC数据类型
    IOS textField(textview)字数判断
  • 原文地址:https://www.cnblogs.com/fjsnail/p/3495807.html
Copyright © 2011-2022 走看看