静态代理模式与工厂设计和Anotation的应用

书接上回

package com.alibaba;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Imessage{
    void send(String chanel);
}
class Imessagempl implements Imessage{
    @Override
    public void send(String chanel) {
        System.out.println(chanel+"消息发送");
    }
}
class proxysendmsg implements InvocationHandler{
    public Object target;   //保存实际业务对象
    public  Object bind(Object target){
        this.target=target;
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this);
    }
    public boolean connected(){
        System.out.println("代理对象进行链接,已完成链接初始化");
        return true;
    }
    public void close(){
        System.out.println("代理正在关闭链接");
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行的方法是"+method);
        Object obj=null;
        if(this.connected()){
            obj=method.invoke(target,args);
            this.close();
        }else {
            System.out.println("无法进行链接");
        }
        return obj;
    }
}


class test{
    public static void main(String[] args) {
        try {
            Imessage imessage = (Imessage) new proxysendmsg().bind(Imessagempl.class.newInstance());
            imessage.send("网络");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 实现工厂类的封装

package com.alibaba;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Imessage{
    void send(String chanel);
}
class Imessagempl implements Imessage{
    @Override
    public void send(String chanel) {
        System.out.println(chanel+"消息发送");
    }
}
class proxysendmsg implements InvocationHandler{
    public Object target;   //保存实际业务对象
    public  Object bind(Object target){
        this.target=target;
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this);
    }
    public boolean connected(){
        System.out.println("代理对象进行链接,已完成链接初始化");
        return true;
    }
    public void close(){
        System.out.println("代理正在关闭链接");
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行的方法是"+method);
        Object obj=null;
        if(this.connected()){
            obj=method.invoke(target,args);
            this.close();
        }else {
            System.out.println("无法进行链接");
        }
        return obj;
    }
}
class Factory{
    private Factory(){};

    public static <T> T getInstance(Class<T> clazz){
        try {
            return (T) new proxysendmsg().bind(clazz.newInstance());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

}
class MessageService{
   private Imessage imessage;
   public MessageService(){
       this.imessage=Factory.getInstance(Imessagempl.class);
   }
   public void send(String msg){
       this.imessage.send(msg);
   }
}



class test{
    public static void main(String[] args) {
        MessageService messageService = new MessageService();
        messageService.send("net");
    }

}

 

 引入Anotation

package com.alibaba;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface Imessage{
    void send(String chanel);
}
class Imessagempl implements Imessage{
    @Override
    public void send(String chanel) {
        System.out.println(chanel+"消息发送");
    }
}
class NETsagempl implements Imessage{
    @Override
    public void send(String chanel) {
        System.out.println(chanel+"NETsagempl消息发送");
    }
}
class proxysendmsg implements InvocationHandler{
    public Object target;   //保存实际业务对象
    public  Object bind(Object target){
        this.target=target;
        return Proxy.newProxyInstance(this.target.getClass().getClassLoader(),this.target.getClass().getInterfaces(),this);
    }
    public boolean connected(){
        System.out.println("代理对象进行链接,已完成链接初始化");
        return true;
    }
    public void close(){
        System.out.println("代理正在关闭链接");
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("执行的方法是"+method);
        Object obj=null;
        if(this.connected()){
            obj=method.invoke(target,args);
            this.close();
        }else {
            System.out.println("无法进行链接");
        }
        return obj;
    }
}
class Factory{
    private Factory(){};

    public static <T> T getInstance(Class<T> clazz){
        try {
            return (T) new proxysendmsg().bind(clazz.newInstance());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

}
@Retention(RetentionPolicy.RUNTIME)
@interface UseMessage{
    public Class<?> clazz();
}
@UseMessage(clazz = NETsagempl.class)
class MessageService{
   private Imessage imessage;
   public MessageService(){
       UseMessage useMessage =MessageService.class.getAnnotation(UseMessage.class);

       this.imessage=(Imessage) Factory.getInstance(useMessage.clazz());
   }
   public void send(String msg){
       this.imessage.send(msg);
   }
}



class test{
    public static void main(String[] args) {
        MessageService messageService = new MessageService();
        messageService.send("");
    }

}

 

posted on 2022-03-29 16:45  jiapengchu  阅读(26)  评论(0)    收藏  举报

导航