快放假了···难得空闲···整理一下工作中常用的模式放上来···
定义所需要的接口:
- package com.xxx;
- public interface Artist {
- public void show();
- }
实现该接口的类:
- package com.xxx;
- public class Star implements Artist{
- private String name = null;
- private String action = null;
- public String getAction() {
- return action;
- }
- public void setAction(String action) {
- this.action = action;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void show() {
- System.out.println(name + " " + action);
- }
- }
代理类:
- package com.xxx;
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- public class AProxy implements InvocationHandler{
- private Object delegate = null;
- public Object bind(Object delegate){
- this.delegate = delegate;
- return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
- }
- public Object invoke(Object obj, Method method, Object[] args) throws Throwable {
- System.out.println("签约");
- Object result = method.invoke(delegate, args);
- System.out.println("唱完了新闻发布会");
- return result;
- }
- }
测试类:
- package com.xxx;
- public class TestMain {
- public static void main(String [] args) {
- AProxy a = new AProxy();
- Star star = new Star();
- ((Star)star).setName("刘德华");
- ((Star)star).setAction("唱歌");
- Artist artist = (Artist) a.bind(star);
- artist.show();
- }
- }
运行结果:
签约
刘德华 唱歌
唱完了新闻发布会