设计模式之代理模式

来源:互联网 发布:数据库表主键的作用 编辑:程序博客网 时间:2024/05/01 21:23

前言:

代理模式是为其他对象提供一种代理可以控制对这个对象的访问。

一.代理模式的简介

代理其实就是真实对象的代表。让其他对象间接访问对象,在这间接访问的过程中,可以附加上其他操作。

二.代理模式的实现

案例:房屋的销售代理,替买房者跟卖房者交易,完成买房操作。

1. UML类图:

这里写图片描述

2. 卖房者实体类:

package com.pattern.Proxy.bean;/** * 卖家实体类 * @author 葫芦娃 * */public class Seller {    private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

3.买房接口类:

买房者类和代理类都要继承于该接口,这样才能使得买家的所有操作,代理类都可以替代其完成。

package com.pattern.Proxy.service;/** * 买房接口 *  * @author 葫芦娃 * */public interface IBuyHouse {    // 付钱    public void giveMoney();    // 过户    public void transfer();}

4. 买房者实体类

买房者只需要知道卖家是谁,所以通过构造方法,引入Seller卖家实体类。然后实现IBuyHouse接口的买房操作。

package com.pattern.Proxy.impl;import com.pattern.Proxy.bean.Seller;import com.pattern.Proxy.service.IBuyHouse;public class Purchaser implements IBuyHouse {    //引入卖方对象    private Seller seller;    public Purchaser(Seller seller) {        this.seller = seller;    }    @Override    public void giveMoney() {        System.out.println("买家付费给卖家:" + seller.getName());    }    @Override    public void transfer() {        System.out.println("卖家" + seller.getName() + "将房产证过户给买家");    }}

5. 代理类

代理类需要知道买卖双方是谁,所以代理类也要通过构造方法引入Seller对象,代替购买者完成购房一系列操作。

package com.pattern.Proxy.impl;import com.pattern.Proxy.bean.Seller;import com.pattern.Proxy.service.IBuyHouse;import com.pattern.Proxy.impl.Purchaser;public class SellProxy implements IBuyHouse {    // 被代理买方对象,用以访问实体    private Purchaser purchaser;    // 代理构造方法,控制买方和卖房的关联    public SellProxy(Seller seller) {        this.purchaser = new Purchaser(seller);    }    @Override    public void giveMoney() {        purchaser.giveMoney();    }    @Override    public void transfer() {        purchaser.transfer();    }}

6. 客户端类:

只需要代理和卖房者进行交易操作即可,实现对买房者的隐藏。

package com.pattern.Proxy.client;import com.pattern.Proxy.bean.Seller;import com.pattern.Proxy.impl.SellProxy;public class Client {    public static void main(String[] args) {        //卖方对象        Seller seller = new Seller();        seller.setName("王健林");        //代理对象        SellProxy sProxy = new SellProxy(seller);        //代理执行一系列交易操作        sProxy.giveMoney();        sProxy.transfer();    }   }

7.执行结果:

买家付费给卖家:王健林卖家王健林将房产证过户给买家

三.代理模式的应用:

  1. 远程代理:为不在同一地址的对象提供局部代理,这样可以隐藏这个对象存在与不同空间的事实。
  2. 虚拟代理:在创建资源耗费大的对象时,通过代理来存放实例化时间过长的真实对象。如:网络图片没有加载出来时,显示的底图。
  3. 安全代理:用来控制真实对象的访问权限。当对象有不同的访问权限时,用代理来实现对不同权限的访问。
  4. 指引代理:调用真实对象时,代理处理另外一些事情。如:加锁机制,当访问一个对象的时,通过代理检索该对象是否被锁,都是通过代理完成的。

四.案例下载:点击下载

原创粉丝点击