代理模式~Thread代理实现,静态代理,动态代理

代理模式

代理模式分为静态代理和动态代理。

一、Thread代理模式实现

public class Thread implements Runnable {
    private Runnable target;
    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }
    public void run() {
        if (target != null) {
            target.run();
        }
    }
  	、、、
}

二、实现一个租房代理的静态代理

根据Thread代理模式的实现,写一个租户代理,即中介。

package com.ykq;

/**
 * 租房代理
 */
public class ProxyRent {
    /**
     * 租户
     */
    private ITenant1 tenant;

    /**
     * 无参构造函数
     */
    public ProxyRent() {
    }

    /**
     * 有参构造函数
     */
    public ProxyRent(ITenant1 tenant) {
        this.tenant = tenant;
    }

    /**
     * 租房
     */
    public void rentHouse(String person) {
        if (tenant == null) {
            return;
        }
        System.out.println("中介和" + person + "谈拢价格");
        tenant.rentHouse("中介");
        System.out.println("中介收取中介费");
    }

    public static void main(String[] args) {
        ITenant1 tenant = new Tenant1();
        tenant.rentHouse("房东");
        System.out.println("##########");
        System.out.println("##########");
        System.out.println("##########");
        ProxyRent proxyRent = new ProxyRent(tenant);
        proxyRent.rentHouse("房东");
    }
}

interface ITenant1 {
    void rentHouse(String person);
}

/**
 * 租户
 */
class Tenant1 implements ITenant1{

    public void rentHouse(String person) {
        System.out.println("我和" + person + "谈拢价格");
        System.out.println("租房成功");
    }
}

实现结果:
在这里插入图片描述

三、实现租房中介、售车销售的动态代理

静态代理,对于不同的被代理对象,需要写对应的代理对象,例如对于住房,需要写一个租房中介,对于售车销售需要写一个销售中介。而动态代理可以只写一个代理对象,即可实现既代理租房,又代理销售,甚至代理卖票等。
下面的实现方式是通过jdk反射实现的动态代理,对于cglib的动态代理,知道即可,不做更深层次的了解。

package com.ykq;

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

/**
 * 动态代理对象需要实现InvocationHandler接口
 */
public class DynamicProxy implements InvocationHandler {
    /**
     * 被代理对象
     */
    private Object client;

    /**
     * 有参构造方法,将要被代理的对象的clazz传入
     */
    public DynamicProxy(Class clazz) {
        try {
            this.client = clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("中介(销售)和货主谈拢价格");
        Object rtn = method.invoke(client, args);
        System.out.println("中介(销售)收取中介费");
        return rtn;
    }

    /**
     * 测试方法,测试既作为中介代理租房,又代理销售代理卖车
     */
    public static void main(String[] args) {
        DynamicProxy dynamicProxy = new DynamicProxy(Tenant.class);
        ITenant tenant =(ITenant) Proxy.newProxyInstance(Tenant.class.getClassLoader(),
                new Class[]{ITenant.class}, dynamicProxy);
        tenant.rent("中介");
        System.out.println("##########");
        DynamicProxy dynamicProxy1 = new DynamicProxy(Sell.class);
        ITenant sell = (ITenant) Proxy.newProxyInstance(Sell.class.getClassLoader(),
                Sell.class.getInterfaces(), dynamicProxy1);
        sell.rent("二手车销售");
    }
}

/**
 * 租赁接口
 */
interface ITenant {
    // 租赁
    void rent(String person);
}

/**
 * 租户
 */
class Tenant implements ITenant {
    public void rent(String person) {
        System.out.println("我和" + person + "谈拢价格");
        System.out.println("租房成功");
    }
}

/**
 * 销售
 */
class Sell implements ITenant {

    @Override
    public void rent(String person) {
        System.out.println("我和" + person + "谈拢价格");
        System.out.println("销售成功");
    }
}

实现结果:
在这里插入图片描述

四、复习或作业

当你忘了动态代理是怎么实现的,那么参考第三点的代码,在租房中介,售车中介的基础上,再添加售票站点代理售票的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端
(1)UML样例源文件(8个样例文件) uml/uml.mdl //01.UML快速入门 uml/usecase.mdl //02.用例图 uml/class.mdl //03.静态图——类图、对象图、包图 uml/component.mdl //04.实现图——组件图与部署图 uml/statechart.mdl //05.行为图——状态图 uml/activity.mdl //06.行为图——活动图 uml/sequence.mdl //07.交互图——序列图 uml/collaboration.mdl //08.交互图——协作图 (2)UML上机演练源文件(16个实例文件) uml/usecase_product.mdl //02.用例图——企业产品生产销售管理系统 uml/class_login.mdl //03.类图和包图——企业信息管理系统用户登录和注册模块 uml/component_emis.mdl //04.组件图与部署图——企业信息管理系统 uml/statechart_bug.mdl //05.状态图——Bug管理系统 uml/statechart_atm.mdl //05.状态图——ATM机存取款 uml/statechart_thread.mdl //05.状态图——Java线程类Thread uml/activity_bug.mdl //06.活动图——Bug管理系统 uml/activity_atm.mdl //06.活动图——ATM机存取款 uml/activity_thread.mdl //06.活动图——Java线程类Thread uml/sequence_bug.mdl //07.序列图——Bug管理系统 uml/sequence_atm.mdl //07.序列图——ATM机存取款 uml/sequence_tel.mdl //07.序列图——打电话 uml/collaboration_bug.mdl //08.协作图——Bug管理系统 uml/collaboration_atm.mdl //08.协作图——ATM机存取款 uml/collaboration_tel.mdl //08.协作图——打电话 uml/bug.mdl //09.综合实例——Bug管理系统 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1工厂方法模式 pattern/src/creation/abstractfactory //11.2抽象工厂模式 pattern/src/creation/singleton //11.3单例模式 pattern/src/creation/builder //11.4建造者模式 pattern/src/creation/prototype //11.5原型模式 pattern/src/structure/adapter //12.1适配器模式 pattern/src/structure/decorator //12.2装饰器模式 pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/behavior/templatemethod //13.2模板方法模式 pattern/src/behavior/observer //13.3观察者模式 pattern/src/behavior/iterator //13.4迭代子模式 pattern/src/behavior/chainofresponsibility//13.5责任链模式 pattern/src/behavior/command //13.6命令模式 pattern/src/behavior/memento //13.7备忘录模式 pattern/src/behavior/state //13.8状态模式 pattern/src/behavior/visitor //13.9访问者模式 pattern/src/behavior/mediator //13.10中介者模式 pattern/src/behavior/interpreter //13.11解释器模式 (4)SOA(12个程序包) soa/JAXWSHelloWorldServer.zip //15.JAX-WS服务端——HelloWorld实例 soa/JAXWSHelloWorldClient.zip //15.JAX-WS客户端——HelloWorld实例 soa/AxisHelloWorldServer.zip //16.Axis服务端——HelloWorld实例 soa/AxisHelloWorldClient.zip //16.Axis客户端——HelloWorld实例 soa/SCAJavazip //19.SCA实例——计算器实例 soa/SCAWSServer.zip //19.SCA服务端实例——HelloWorld实例 soa/SCAWSClient.zip //19.SCA客户端实例——HelloWorld实例 soa/OSGiHelloWorld.zip.zip //21.OSGi实例——HelloWorld实例 soa/demo.sql //24.SOA服务架构实战——企业信息管理系统数据库脚本 soa/ssh2.zip //24.SOA服务架构实战——企业信息管理系统SSH2代码 soa/EmisWeb.zip //24.SOA服务架构实战——企业信息管理系统SCA服务端 soa/EmisService.zip //24.SOA服务架构实战——企业信息管理系统Web端

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值