设计模式之动态代理

一、java编程思想反射章节的动态代理实现代码展示

package com.lattice.dtagency;

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

interface Person{
    void doSomeThing();
    void doSomeThingElse(String arg);
}

class Peter implements Person{
    @Override
    public void doSomeThing() {
        System.out.println("Peter likes fishing!");
    }

    @Override
    public void doSomeThingElse(String arg) {
        System.out.println("Peter else likes swimming!"+arg);
    }
}

class Merry implements Person{

    @Override
    public void doSomeThing() {
        System.out.println("Merry likes dancing!");
    }
    @Override
    public void doSomeThingElse(String arg) {
        System.out.println("Merry else likes watching movies!"+arg);

    }
}
/**
 * 静态代理类
 **/
class Lucy implements Person{
    private Person person;
    public Lucy(Person person){
        this.person=person;
    }
    public void getPerson(Person person){
        this.person=person;
    }
    @Override
    public void doSomeThing() {
        this.person.doSomeThing();
    }
    @Override
    public void doSomeThingElse(String arg) {
        this.person.doSomeThingElse(arg);
    }
}

/*
 * 动态代理类
 */
class Maria implements InvocationHandler{
    private Object person;
    public Maria(Object person){
        this.person=person;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        System.out.println("\n_____person\t:"+person.getClass()+
                "\nmethod:"+method+"\targs"+args);
        if(args!=null){
            for(Object arg:args){
                System.out.println("+++++++"+arg);
            }
        }
        return method.invoke(person, args);
    }
}
public class Afgency {
    public static void doWork(Person person){
        person.doSomeThing();
        System.out.println("******************");
        person.doSomeThingElse("---------------------");
    }
    public static void main(String [] args){
        //doWork(new Lucy(new Peter()));
        //动态代理对象创建
        Person person=(Person)Proxy.newProxyInstance(Person.class.getClassLoader()
                , new Class[]{Person.class}, new Maria(new Peter()));
        doWork(person);
    }
}

二、结果展示

_____person :class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThing() argsnull
Peter likes fishing!


_____person :class com.lattice.dtagency.Peter
method:public abstract void com.lattice.dtagency.Person.doSomeThingElse(java.lang.String) args[Ljava.lang.Object;@1a3a2a52
+++++++———————
Peter else likes swimming!———————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值