设计模式之代理模式(静态代理)

原创 2016年08月30日 15:01:19

概要

设计模式是一门艺术,如果真正了解这门艺术,你会发现,世界都将变得更加优美。

定义

为其它的对象提供一种代理,以控制这个对象的访问

使用场景

当不想直接访问某个对象的时候,就可以通过代理

1.不想买午餐,同事帮忙带
2.买车不用去厂里,去4s店
3.去代理点买火车票,不用去车站

UML

这里写图片描述

介绍下上面的UML图的意思,以购买火车票为例

(1)IProxy

定义代理的接口,买票

(2)ProxyObject

代理的对象,完成代理的任务,设置具体的代理,调用具体的代理方法等

(3)RealObject

具体的代理对象,处理具体的业务逻辑

简单的介绍了他们之间的关系,看起来非常的简单

代码实现

上面我们已经很清晰的明白了他们之间的关系,所以接下来就用代码演示,将上面我们的想法和逻辑用代码表现出来:

(1)定义代理接口

package com.zengtao.demo.proxy;

public interface IProxy {

    void buyTicket();

}

(2)代理

package com.zengtao.demo.proxy;

/**
 * 代理
 */
public class Proxy implements IProxy {

    private RealProxy realClient;

    public Proxy(RealProxy realClient) {
        this.realClient = realClient;
    }

    @Override
    public void buyTicket() {
        realClient.buyTicket();
    }

}

(3)具体代理买票

package com.zengtao.demo.proxy;

import com.zengtao.demo.bean.User;

/**
 * 具体代理买票
 */
public class RealProxy implements IProxy {

    private User user;

    public RealProxy() {

    }

    public RealProxy(User user) {
        this.user = user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public void buyTicket() {
        // 具体实现逻辑
        if (user != null) {
            System.out.println("***********我要买票***********");
            System.out.println("信息如下:");
            System.out.println("姓名:" + user.getName());
            System.out.println("性别:" + user.getSex());
            System.out.println("身份证号:" + user.getCardCode());
            System.out.println("住址:" + user.getHomeAddress());

            System.out.println("***********信息已核对***********");
            System.out.println("出票成功:动车D2222次09车20A");
        }
    }
}

(4)用户对象

package com.zengtao.demo.bean;

import java.io.Serializable;

@SuppressWarnings("serial")
public class User implements Serializable {

    private String cardCode;
    private String name;
    private String homeAddress;
    private String sex;

    public String getCardCode() {
        return cardCode;
    }

    public void setCardCode(String cardCode) {
        this.cardCode = cardCode;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHomeAddress() {
        return homeAddress;
    }

    public void setHomeAddress(String homeAddress) {
        this.homeAddress = homeAddress;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

(6)具体调用

package com.zengtao.demo;

import com.zengtao.demo.bean.User;
import com.zengtao.demo.proxy.Proxy;
import com.zengtao.demo.proxy.RealProxy;

public class Main {

    public static void main(String[] str) {
        // 用户信息
        User user = new User();
        user.setCardCode("510522177709096836");
        user.setSex("男");
        user.setName("无名氏");
        user.setHomeAddress("地球村第七号店铺");

        // 具体代理
        RealProxy realClient = new RealProxy();
        realClient.setUser(user);

        // 代理
        Proxy proxy = new Proxy(realClient);
        proxy.buyTicket();
    }
}

(7)结果

这里写图片描述

以上以代理模式的方式,简陋的实现了购票的流程。

总结

大家也可以看到,其实代理模式,说白了就是委托,将所有的事情都委托给别人帮你完成,你所要做的,就是给代理一些东西,接下来所有的事情都是代理帮你完成,你完全不用去关心内部是如何实现的。

代理模式:一般可以分为两种,一种为静态代理,一种为动态代理

(1)静态代理

静态代理:就是我们上述所写的,代理代码是由我们自己去生成的固定的代码进行编译

(2)动态代理

动态代理:动态代理,跟静态代理相反,它是用反射机制动态的生成代理的对象,我们不需要知道谁代理谁

由于篇幅原因,动态代理

请看下篇 设计模式之代理模式(动态代理)

—————End————-

版权声明:本文为博主原创文章,欢迎转载和分享,转载请标明出处!

代理模式(静态代理)的通俗理解

代理模式分为两种:静态代理和动态代理。 首先不谈模式,举一个例子:        有一队很美丽的妹子,她们都是训练有素的迎宾小姐。平时忙于训练再加上人脉与广告投入不多,生意并不好。于是她们的老大提...
  • u013283727
  • u013283727
  • 2014年12月10日 16:55
  • 799

静态代理模式

以前学习设计模式时,基本一直接触的是静态的设计模式,静态代理模式虽然简单易用,但是存在诸多问题。 代理模式     说一下我对代理模式的理解:因为需要对一些函数进行二次处理,或是某些函数不让外界知道时...
  • lidaasky
  • lidaasky
  • 2013年06月03日 08:08
  • 7424

设计模式——静态代理模式

有半个月没有写博客了,接下学习下代理模式。 代理模式包含:静态代理模式和动态代理模式。 包含以下三个角色: 抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角...
  • zhanghuamiong
  • zhanghuamiong
  • 2016年03月17日 00:12
  • 394

【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

这篇博文,我们以类图和代码的形式来对比学习一下静态代理和动态代理,重点解析各自的优缺点。 定义        代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年08月23日 07:50
  • 10714

java静态代理实现代码

静态代理接口 public interface UserService { void queryUsers(); }实现类 public class UserServiceImp implem...
  • u014108448
  • u014108448
  • 2015年05月24日 10:40
  • 278

静态代理模式(Static Proxy)解析

要使用被代理类对象的方法时,只需简单的实例化代理类对象,并向上转型为接口(面向接口编程),此时调用此代理类对象的方法就相当于调用被代理类的方法。        当客户端代码需要调用某个对象时,客户端实...
  • koushr
  • koushr
  • 2015年08月07日 17:41
  • 737

Java设计模式-代理模式之静态代理

Java设计模式-代理模式之静态代理 概念 为另一个对象提供一个替身或占位符以提供对这个对象的访问,使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理对象可以是远程的对...
  • yujin753
  • yujin753
  • 2015年06月26日 11:25
  • 1130

JAVA设计模式(三)静态与动态代理模式

代理模式:为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理...
  • hukuhy
  • hukuhy
  • 2016年12月10日 16:07
  • 279

设计模式之代理模式(静态代理)

概要设计模式是一门艺术,如果真正了解这门艺术,你会发现,世界都将变得更加优美。定义为其它的对象提供一种代理,以控制这个对象的访问使用场景当不想直接访问某个对象的时候,就可以通过代理1.不想买午餐,同事...
  • u011546655
  • u011546655
  • 2016年08月30日 15:01
  • 1376

代理模式之静态代理

代理模式 为其他对象提供代理以控制对这个对象的访问 (例如火车票代售处代理火车站售票,提供电话预约订票等渠道,但是退票只能在火车站退) "去掉功能服务,增加额外服务" 各类代理: 1...
  • zhuyu714997369
  • zhuyu714997369
  • 2016年07月21日 17:21
  • 882
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式之代理模式(静态代理)
举报原因:
原因补充:

(最多只允许输入30个字)