`
emlyn_1180
  • 浏览: 32839 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

回顾Java中的代理模式

阅读更多
代理模式有三个角色

代理模式一般涉及到的角色有:

抽象角色:声明真实对象和代理对象的共同接口(这里卖电脑);

代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装(电脑代理商可以卖电脑,同时为了吸引顾客可能还要附送一些赠品,这里暂定为鼠标)。

真实角色:代理角色所代表的真实对象,是我们最终要引用的对象(代理商本身是没有电脑的,这里的真实角色是厂家ComputerMaker)。

这里是基于Java的代理模式,所以只能是接口代理,下面是抽象角色
public interface  SaleComputer {
	public abstract void saleComputer(String type);//卖电脑
	
}

接下来是真实角色
public class ComputerMaker implements SaleComputer {//厂家出售电脑

	private Logger log = Logger.getLogger(this.getClass().getName());
		
	public void saleComputer(String type) {
		log.info("computermaker sale computers("+type+")....");
		
	}
	

}

代理机制
public class FunctionProxy implements InvocationHandler {//代理后
	private Object delegate;
	private Logger logger = Logger.getLogger(this.getClass().getName());
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		Object o = null;
		
		o=method.invoke(delegate, args);
		giveMouse();
		
		return o;
	}
	public FunctionProxy(Object delegate){
		this.delegate = delegate;
	}
	
	private void giveMouse(){
		logger.info("赠送鼠标.....");
	}
	

}

测试,创建代理商实例
public class TestProxy {

	
	public static void main(String[] args) {
		
		SaleComputer sc = new ComputerMaker();
		
		InvocationHandler  handler = new FunctionProxy(sc);
		
		SaleComputer proxy = (SaleComputer) Proxy.newProxyInstance(sc.getClass().getClassLoader(), 
				sc.getClass().getInterfaces(), handler);//创建代理商实例
		
		proxy.saleComputer("LENEVO");//代理商卖电脑
		
	}

}
输出结果

信息: computermaker sale computers(LENEVO)....

信息: 赠送鼠标.....

分享到:
评论

相关推荐

    《Java设计模式》课程设计报告.docx

    在西瓜市场系统中,代理模式可能用于实现权限控制,比如用户购买西瓜时,代理类可以负责检查用户的支付能力和权限,或者在真实购买之前提供预览功能。 3. **建造者模式**: 建造者模式将复杂对象的构建与其表示...

    java设计模式迷你手册.rar

    结构型模式关注如何组合类和对象以构建更复杂的结构,如适配器模式(Adapter)、装饰器模式(Decorator)和代理模式(Proxy),这些模式能够使不同组件之间更好地协作。行为型模式则关注对象间的交互和责任分配,...

    稳稳当当学java之设计模式(12).md

    本人的笔记,关于java基础中设计模式的内容 包括 1.作业回顾 2.内部类 2.1局部内部类 2.2静态内部类 2.3匿名内部类 3.设计模式 3.1单例模式 3.2代理模式 3.3观察者模式 3.4模板模式 4.练习

    java模式下的编程要诀源码整理

    7. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,常用于远程代理、虚拟代理、缓存代理等。 8. **观察者模式**:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象...

    java知识点回顾

    - 结构型模式:如适配器模式、装饰者模式、代理模式等。 - 行为型模式:如策略模式、命令模式、观察者模式等。 ### 11. 图形用户界面 (GUI) Java 提供了 Swing 和 JavaFX 等库来开发 GUI 应用程序。 - `Swing`: ...

    以轻松的语言比喻了java的23种模式

    代理服务器就像是代理模式中的代理对象,它作为你和MM之间的中间人,帮你处理网络问题,确保视频聊天的顺利进行。这种方式不仅提高了聊天的质量,还保护了你的真实身份信息。 #### 十三、职责链模式(Chain of ...

    java面试常见问题回顾

    8. **设计模式**:面试者应掌握常见的设计模式,如单例、工厂、抽象工厂、建造者、装饰器、适配器、代理、观察者、策略、模板方法等,并能给出实际应用的例子。 9. **JVM**:理解JVM的结构,包括堆内存、栈内存、...

    java深度历险+深入java虚拟机

    1. **Java基础**:虽然不是初学者入门教程,但书中会回顾Java的基础,如语法、类、对象、接口、异常处理等,为深入探讨打下坚实基础。 2. **面向对象设计**:深入讨论了如何利用Java进行高效、可维护的面向对象设计...

    遇到的一些Java面试题回顾.docx

    正则表达式是一种字符串匹配机制,用于匹配字符串中的一些特定模式。js 中的全局变量和局部变量可以使用正则表达式来区分。 15. 字符串连接: js 中字符串连接可以使用 Array.join() 方法,提高字符串连接的效率。

    JAVA课程总复习

    "JAVA课程总复习"涵盖了从基础到高级的各种Java知识点,旨在帮助开发者系统地回顾和理解这个强大而广泛应用的编程语言。 首先,我们关注的是"PPT_JAVA总复习.ppt",这是一个精心制作的PowerPoint演示文稿,通常会...

    软件设计模式--填空题+简答题(复习7).rar

    3. **Java设计模式应用**:Java作为广泛使用的编程语言,其社区发展出许多针对Java平台的设计模式实现,例如使用单例模式保证类的唯一实例,或者使用工厂模式简化对象的创建过程。 4. **体系结构**:在软件设计中,...

    java程序设计教程(清华大学)

    5. **第8章 泛型-枚举-内部类**:泛型提供了类型安全,枚举用于定义常量集合,而内部类则是Java中实现复杂设计模式的重要工具。 6. **第9章 异常**:讲解了如何处理运行时错误和异常,包括try-catch-finally语句块...

    Java初级中级思维导图资源

    这个压缩包中的"JAVA复习.xmind"文件很可能是包含了上述所有知识点的思维导图,可以帮助学习者系统地梳理和回顾Java的学习路径,通过可视化的方式加强记忆,提高学习效率。在学习过程中,结合实际项目实践,将理论...

    Java-JUC-多线程 进阶

    单例模式是 Java 中的一种经典设计模式,描述了如何创建一个全局的可访问对象。单例模式可以用于解决多种设计问题,例如配置对象、日志对象等。 饿汉式、懒汉式、静态内部类 饿汉式、懒汉式、静态内部类是 Java 中...

    java学习中的一点忠告

    在深入探讨《java学习中的一点忠告》这篇文章所涵盖的关键知识点之前,我们先来简要回顾一下文章的大致框架。该文旨在为Java学习者提供一系列宝贵的建议和指导,覆盖了从基础知识到高级概念的广泛领域。接下来,我们...

    java笔记绝对干货

    本笔记集合了在Java学习过程中所涵盖的核心概念、关键技术和实践应用,旨在为初学者提供清晰的学习路径,同时也适合有经验的开发者回顾巩固。 1. **Java基础** - **语法结构**:讲解Java的基础语法,包括变量、...

    Java中Swing的相关知识(1)

    ### Java中Swing的相关知识详解 #### 一、Swing简介 ##### 1.1 Swing的背景 在深入了解Swing之前,我们先回顾一下它的前身——AWT(Abstract Window Toolkit)。AWT最初是为了支持简单的用户界面而设计的,主要...

    侯捷2015设计模式课件-同济

    这次分享不仅覆盖了GoF的经典设计模式,还探索了GoF之外的一些设计模式,以及在C++和Java语言中的具体应用和实现。 首先,设计模式课件回顾了面向对象编程(Object-Oriented Programming,OOP)的基本原则,如封装...

    疯狂Java:突破程序员基本功16课pdf+源代码

    1. **Java基础知识**:本书首先回顾了Java的基础,包括语法、数据类型、流程控制语句、类和对象等,确保读者具备坚实的编程基础。 2. **面向对象编程**:深入探讨Java的面向对象特性,如封装、继承和多态,以及接口...

    java进阶13天资料.zip

    Java进阶13天资料 day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection...

Global site tag (gtag.js) - Google Analytics