关闭

运用代理模式,实现相同的操作方法,可以增加自己的逻辑

标签: 代理模式设计思想
538人阅读 评论(2) 收藏 举报
分类:

代理模式:类似中介的效果

代理模式定义:

 为另一个对象提供一个替身或占位符以控制对这个对象的访问。

图解如下:


代理最主要的是  :可以增加自己的操作在方法中。
 

 
public class DialogHelper {
	private volatile static DialogHelper dialogHelper = null;
	private static PromDialog currentDialog = null;
	private static Context curContext = null;
	
	private DialogHelper() {}
	
	/**
	 * 获取DialogHelper实例
	 * @return DialogHelper
	 */
	public static DialogHelper getInstance(){
		if(dialogHelper == null){
			synchronized (DialogHelper.class) {
				if(dialogHelper == null){
					dialogHelper = new DialogHelper();
				}
			}
		}
		return dialogHelper;
	}
	public static void setContext(Context context){
		curContext = context;
		initBroadcastReceiver();
	}
	public static void setKeyClickListener(KeyClickListener listener){
		mListenerUser = listener;
	}
	public static void setThreeKeyListener(ThreeKeyListener listener){
		mThreeListenerUser = listener;
	}
	private static void initBroadcastReceiver(){

	}
	/**
	 * 
	 * @param title 标题
	 * @param content 内容
	 * @param firStr  第一个字符
	 * @param middStr  第二个字符 (可为空)
	 * @param canStr 第三个字符 (可为空)
	 * @param type  类型
	 */
	private static void showDialog(String title,String content,String firStr,String middStr,String canStr,int type){
		if(currentDialog != null){
			hideDialog(false);
		}
		currentDialog = new PromDialog(curContext,type);
		if(type == 0 || type == 1 || type == 2 || type ==4){
			currentDialog.setData(title, content, firStr, canStr);
		}
		else if(type == 3){
			currentDialog.setData(title, content, firStr, middStr, canStr);
		}
	}
	//一个Button
	public static void showDialog(String title,String content,String firStr){
		showDialog(title,content,null,null,firStr,4);
		if(currentDialog != null){
			currentDialog.setListener(mListenerProxy);
			currentDialog.show();
		}
	}
	//两个Button
	public static void showDialog(String title,String content,String firStr,String canStr,DialogEnum type){
		switch (type) {
		case DIALOG_NORMOL:
			showDialog(title,content,firStr,null,canStr,0);
			break;
		case DIALOG_NO_CONTENT:
			showDialog(title,content,firStr,null,canStr,1);
			break;
		case DIALOG_HAS_CONTENT:
			showDialog(title,content,firStr,null,canStr,2);
			break;

		default:
			break;
		}
		if(currentDialog != null){
			currentDialog.setListener(mListenerProxy);
			currentDialog.show();
		}
	}
	//三个Button
	public static void showDialog(String title,String content,String firStr,String middStr,String canStr){
		showDialog(title,content,firStr,middStr,canStr,3);
		if(currentDialog != null){
			currentDialog.setThreeListener(mThreeListenerProxy);
			currentDialog.show();
		}
	}

	/**
	 * 隐藏Dialog
	 */
	public static void hideDialog(boolean isBroadcastReceiver){
		if(isBroadcastReceiver){
			if(mListenerUser != null){
				mListenerUser.backDismiss();
			}
			if(mThreeListenerUser != null){
				mThreeListenerUser.cancle();
			}
		}		
		if(currentDialog != null){
			currentDialog.dismiss();
			currentDialog = null;
		}
		
	}
	
	public static boolean isShowing(){
		if(currentDialog != null){
			return currentDialog.isShowing();
		}
		else{
			return false;
		}
		
	}
	
	private static KeyClickListener mListenerUser;
	private static ThreeKeyListener mThreeListenerUser;
	private static KeyClickListener mListenerProxy = new KeyClickListener() {
		
		@Override
		public void operation() {
			if (null != mListenerUser) {
				mListenerUser.operation();
			}
			hideDialog(false);
		}
		
		@Override
		public void cancle() {
			if (null != mListenerUser) {
				mListenerUser.cancle();
			}
			hideDialog(false);
		}
		
		@Override
		public void backDismiss() {
			if (null != mListenerUser) {
				mListenerUser.backDismiss();
			}
			hideDialog(false);
		}
	};
	private static ThreeKeyListener mThreeListenerProxy = new ThreeKeyListener() {
		
		@Override
		public void operation() {
			if(null != mThreeListenerUser){
				mThreeListenerUser.operation();
			}
			hideDialog(false);
		}
		
		@Override
		public void middle() {
			if(null != mThreeListenerUser){
				mThreeListenerUser.middle();
			}
			hideDialog(false);
		}
		
		@Override
		public void cancle() {
			if(null != mThreeListenerUser){
				mThreeListenerUser.cancle();
			}
			hideDialog(false);
		}
	};

}

  
希望认真理解代理模式,让其发挥巨大的效能。

1
0
查看评论

Android设计模式之代理模式 Proxy

一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日...
  • l2show
  • l2show
  • 2015-07-28 22:14
  • 20610

Java代理模式 动态代理 的应用场景

先看一下代理模式,这个应该是设计模式中最简单的一个了,类图   代理模式最大的特点就是代理类和实际业务类实现同一个接口(或继承同一父类),代理对象持有一个实际对象的引用,外部调用时操作的是代理对象,而在代理对象的内部实现中又会去调用实际对象的操作  ...
  • yansong_8686
  • yansong_8686
  • 2016-02-19 00:22
  • 5898

代理模式在android中使用

代理设计模式是对象的结构模式,原理就是给某个对象提供一个代理对象,并由代理对象来控制对愿对象的引用。在有些情况下,一方不能或不想直接引用一个对象,而代理对象可以在双方之间起到中介的作用,这样可以大大降低彼此的耦合关系,提高彼此的灵活性。
  • why_2012_gogo
  • why_2012_gogo
  • 2015-04-29 16:02
  • 1133

设计模式: 自己手动写一个代理模式

代理模式:为另一个对象提供一个替身或占位符以访问这个对象。代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。 远程代理管理客户和远程对象之间的交互。 虚拟代理控制访问实例化开销大的对象。 保护代理基于调用者控制对对象方法的访问。 代理模式有许多变体,例如:缓存代...
  • wen942467928
  • wen942467928
  • 2015-08-27 14:00
  • 710

OC中的代理模式(初级)

相信凡是接触过编程语言的人都会多多少少接触到一种设计模式—-代理模式。今天我就OC来说说代理模式的具体原理吧! 首先我们先了解一下具体的代理含义,不知道有没有人在设计类的时候遇到这样的问题:假如我们事先创建了两个不同属性功能的类A与类B,如果我们想在类A中使用B中的某个功能,我们可能会马上想到在A...
  • Forget_gray
  • Forget_gray
  • 2015-09-05 00:52
  • 578

浅析JavaScript设计模式——代理模式

代理模式 为一个对象提供一个代用品或占位符,以便控制对它的访问 好久没有写设计模式的文章了 今天要写的代理模式可能内容要多一些 代理模式非常有用,代理模式也分为很多很多种,我只谈一些常见并且简单的 思想其实都是一样的 代理这个词我们并不陌生,在生活中例子也很多,比如,经纪人… 当我们...
  • q1056843325
  • q1056843325
  • 2016-11-17 20:33
  • 1024

逻辑代数原理及其应用

1. 异或运算用于变量交换,在不引入中间变量的情况下 2. 异或运算用于简单加密算法
  • lanchunhui
  • lanchunhui
  • 2016-02-14 20:10
  • 591

设计模式之代理模式 c++实现以及详解

代理模式分为四类:远程代理,虚代理,保护代理和智能引用。
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2014-05-22 14:16
  • 3732

代理模式深入学习(二)——实现动态代理对事务的封装

前两篇博客已经为这篇博客做了很多铺垫,从动态代理的实现衍生原理到threadLocal来封装事务,到最后真正的利用动态代理来封装事务。缺少每一 步都似乎显得有些冒进了!现在剩下的就只是把先前封装好的事务加进到写好的动态代理类中就好了! 动态代理与事务结合package com.bjpower...
  • wangyy130
  • wangyy130
  • 2015-10-18 16:37
  • 903

JAVA设计模式之代理模式

【代理模式应用场景举例】 比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象...
  • jason0539
  • jason0539
  • 2014-04-05 07:07
  • 23475
    个人资料
    • 访问:183492次
    • 积分:3104
    • 等级:
    • 排名:第13269名
    • 原创:112篇
    • 转载:37篇
    • 译文:2篇
    • 评论:70条
    最新评论