Android设计模式--代理模式

1、定义:

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

2、使用:

在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

3、作用:

代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。

4、划分:

代理还分成远程代理、虚代理、保护代理和智能指针;

以下写了一个简单的demo;

其中Bank是一个简单对象,但是,不想对其进行相应的修改,

那么,使用BankProxy
代理来访问Bank对象,用来持有对Bank的使用,并加以保护作用等;

首先是银行的接口;

package com.example.demo.Proxy;

/**
 * 银行接口
 * @author qubian
 * @data 2015年6月3日
 * @email [email protected]
 *
 */
public interface BankInterface {

	public String setBankName(String name);

	public void addCount();
}

接下来是已经写好,并需要保护的对象;

package com.example.demo.Proxy;
/**
 * 银行的实现
 * @author qubian
 * @data 2015年6月3日
 * @email [email protected]
 *
 */
public class Bank implements BankInterface{

	/**
	 * 需要对银行的名称进行相关的操作
	 */
	@Override
	public String setBankName(String name) {
		return name+"Bank_001";
	}

	@Override
	public void addCount() {

		// 具体的操作
	}

}

代理的类,具体的操作:

package com.example.demo.Proxy;
/**
 * 代理类, 我不希望直接访问,Bank 类,即不希望修改 Bank类
 * 这样我就可以使用 代理
 * @author qubian
 * @data 2015年6月3日
 * @email [email protected]
 *
 */
public class BankProxy implements BankInterface{

	private Bank mBank;

	public void setmBank(Bank mBank) {
		this.mBank = mBank;
	}

	@Override
	public String setBankName(String name) {

		if (mBank==null) {
			mBank = new Bank();
		}
		// 在代理的内部 实际上还是使用的 被代理的类
		// 只是可以 加上代理 也可以加上 自己的操作
		String setName =mBank.setBankName(name);
		//其他操作
		return setName;
	}

	@Override
	public void addCount() {
		if (mBank==null) {
			mBank = new Bank();
		}
		mBank.addCount();
		//其他操作
	}

}

使用:

package com.example.demo.Proxy;

public class UserProxy {

	public void useBank()
	{
		BankInterface bank =new BankProxy();
		bank.setBankName("招商银行");
		bank.addCount();

	}
}

那么,在Android中有很多地方都使用了代理:

1、Android的进程间通信时使用的AIDL,系统中利用AIDL定义一种远程服务,就是一种远程的代理模式;链接

2、源码中ActivityManagerProxy类就是一个代理,它是ActivityManagerNative的代理,他们共有的接口IActivityManager,ActivityManager就是对其中的使用;

时间: 2024-11-11 03:10:29

Android设计模式--代理模式的相关文章

设计模式 - 代理模式(proxy pattern) 未使用代理模式 详解

代理模式(proxy pattern) 未使用代理模式 详解 本文地址: http://blog.csdn.net/caroline_wendy 部分代码参考: http://blog.csdn.net/caroline_wendy/article/details/37698747 如果需要监控(monitor)类的某些状态, 则需要编写一个监控类, 并同过监控类进行监控. 但仅仅局限于本地, 如果需要远程监控, 则需要使用代理模式(proxy pattern). 具体方法: 1. 类中需要提供

设计模式——代理模式

概念 代理模式(Proxy),为其他对象提供一种代理以控制对象的访问. 模式结构 一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理类再 访问真正要访问的对象. 代理模式UML图 代码实战 <span style="font-family:KaiTi_GB2312;font-size:18px;"> //代理模式 class  Proxy : IGiveGift                   //让"代理&qu

23种设计模式----------代理模式(二)

(上一篇)23种设计模式----------代理模式(一) 之前说了基本的代理模式和普通代理模式.接下来开始看下强制代理模式和虚拟代理模式 三,强制代理模式: 一般的代理模式都是通过代理类找到被代理的对象,从而调用被代理类中的方法(即完成被代理类中的任务). 而,强制代理模式则是先找到被代理类自己去完成事情,然后被代理类又将该做的事情转交到代理类中,让代理类来完成. 假如:你有事求助于某位名人. 你告诉名人说有事想请他帮忙,然后他说最近一段时间比较忙,要不你找我的经纪人来办吧. (本来找名人办事

23种设计模式----------代理模式(三) 之 动态代理模式

(上一篇)种设计模式----------代理模式(二) 当然代理模式中,用的最广泛的,用的最多的是  动态代理模式. 动态代理:就是实现阶段不用关系代理是哪个,而在运行阶段指定具体哪个代理. 抽象接口的类图如下: --图来自设计模式之禅 所以动态代理模式要有一个InvocationHandler接口 和 GamePlayerIH实现类.其中 InvocationHandler是JD提供的动态代理接口,对被代理类的方法进行代理. 代码实现如下 抽象主题类或者接口: 1 package com.ye

23种设计模式----------代理模式(一)

代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者接口) IGamePlayer 2,代理类. 3,被代理类. 下面以游戏玩家代理为例. 一,先来看下最基本的代理模式. 代码如下: 主题接口: 1 package com.yemaozi.proxy.base; 2 3 //游戏玩家主题接口 4 public interface IGamePlaye

5.大话设计模式-代理模式

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DesignModel { public class Proxy:IAction { ZQZ zzz = null; public Proxy(ZQZ mm) { zzz = mm; } public void SendFlower() { zzz

设计模式----代理模式(Proxy)

为还有一个对象提供一个替身或占位符以控制对这个对象的訪问. 代理模式的组成: 主题接口(Subject):提取真正主题与代理的公共方法,让使用真正主题的地方也能用代理取代. 真正主题(RealSubject):真正处理请求的类. 代理(Proxy):真正主题的代理类,请求方通过调用代理对象间接调用真正主题. 代理模式的简单样例: (主题接口类)Subject.java package xu.neng.Proxy; public interface Subject { public void re

一起学java设计模式--代理模式(结构型模式)

代理模式 应用软件所提供的桌面快捷方式是快速启动应用程序的代理,桌面快捷方式一般使用一张小图片来表示(Picture),通过调用快捷方式的run()方法将调用应用软件(Application)的run()方法.使用代理模式模拟该过程,绘制类图并编程实现. package ProxyPattern; interface Software { void run(); } class Application implements Software { public void run() { Syste

设计模式-代理模式(Go语言描述)

大家好, 我是大帅哥,由于最近又变帅了, 所以我决定由我的代理人小帅哥来写这篇博客,不过内容可以放心,还是由我来完成,小帅哥的活就是将我的内容替我发出来罢了. &_& 还是进入正题吧, 今天这篇博客我们继续来学习设计模式, 在学习了上面几个设计模式之后大家有没有发现设计模式其实很简单, 难道地方是何时选用合适的模式, 这也是设计模式最重要的地方, 不能我们学会的设计模式就可以乱用. 明白就好-- 下面我们就开始介绍一个新的设计模式-代理模式. 模式定义 什么是代码模式? 其实文章刚开始的段

Java设计模式-代理模式之动态代理(附源码分析)

Java设计模式-代理模式之动态代理(附源码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的区别就是:动态代理是在运行时刻动态的创建出代理类及其对象.上篇中的静态代理是在编译的时候就确定了代理类具体类型,如果有多个类需要代理,那么就得创建多个.还有一点,如果Subject中新增了一个方法,那么对应的实现接口的类中也要相应的实习该方法,不符合设计模式原则. 动态代理的做法:在运行时刻,可以动态创建出一个实现了多个接口的代理类.每个代理类的对象都会关联一个表示内部处理