基础代理设计模式

xiaoxiao2021-02-28  30

/** * 代理设计 * 目的:获取所有子类实现接口的方法 * 0、一个待实现的接口 * 1、创建实现接口核心类 * 2、创建实现接口普通类,并提供核心类和普通类的方法存储整合功能 * 3、创建一个工厂类,提供普通类和核心类的实例化方法,因为普通类中的整合方法需要核心类作为参数,所以普通类的实例化方法还需调用核心类的实例化方法 * 4、在工厂类中,通过参数反射实例化每个实现接口的类,并在主函数中,通过方法返回值,取得实现接口类的对象并调用类的方法 * 5、在主函数创建工厂对象后调用 * @author Administrator * */ interface ISubject { public void eat(); } //工厂类 class Factory { private Factory() {} public static <T> T getInstance(String className) { T t = null; try { t = (T) Class.forName(className).newInstance(); } catch (Exception e) { e.printStackTrace(); } return t; } public static <T> T getInstance(String proxyClassName,String realClassName) { //(普通类,核心类) T t = null; try { T obj = getInstance(realClassName); // 获取ProxySubject构造方法(参数:RealSubject实现的接口的对象) Constructor<?> cons = Class.forName(proxyClassName).getConstructor((obj.getClass().getInterfaces())[0]); t = (T) cons.newInstance(obj); } catch (Exception e) { e.printStackTrace(); } return t; } } //核心功能类 class RealSubject implements ISubject { public void eat() { System.out.println("吃饭"); } } //组合功能类 class ProxySubject implements ISubject { private ISubject subject; //实现接口类对象 public ProxySubject() { System.out.println("测试"); } public ProxySubject(ISubject subject) { this.subject = subject; } public void prepare() { //普通功能 System.out.println("准备食材"); } public void eat() { //完全功能 this.prepare(); this.subject.eat(); this.clear(); } public void clear() { //普通功能 System.out.println("收拾"); } } public class TestDemo { public static void main(String[] args) throws Exception { ISubject subject = Factory.getInstance("cn.mldn.demo.ProxySubject", "cn.mldn.demo.RealSubject"); subject.eat(); } }
转载请注明原文地址: https://www.6miu.com/read-2623948.html

最新回复(0)