`
edr_
  • 浏览: 169523 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

设计模式-代理模式

阅读更多
设计模式-代理模式

即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问(例如一个内向的男孩想追一个女孩,不过又不认识,但是认识她旁边的闺蜜,这时就是可以通过闺蜜这个中间点来转达双方的意思了,在这个情景中,闺蜜是代理类,男孩则是被代理类)。

优点

(1)职责清晰

男孩的角色就是实现实际的业务逻辑(男孩:表达自己的情意),不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

(2)保护目标对象

代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用(闺蜜此时相当于一个网关,先帮助目标对象女孩过滤)。

模式结构

真正对象与代理对象实现同一个接口;见下图


代码示例

假设有一个Person接口,有空的方法sayHi()(问好),所有的PersonXXX对象都实现(implements)这个接口,实现sayHi()方法,前端有很多地方都将PersonXXX实例化,执行sayHi()方法,后来发现要在执行之前加点其他的逻辑业务(例如:先判断一下),在不改动原业务逻辑的前提我们可以改变实现类;

即代理类与被代理类实现同一个接口,但是具体实现方法不同,代理类的实现方法会调用被代理类的实现方法(有点像设计模式中的组合模式,代理强调的是继承实现)

代码如下:
//接口类
package test.patterns.proxy;
public interface Person {
	public void sayHi();
}

//Person实现类PersonBoy 
package test.patterns.proxy;
public class PersonBoy implements Person{
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public PersonBoy(String name,int age){
		this.name=name;
		this.age=age;
	}
	@Override
	public void sayHi() {
		System.out.println(name+":你好!我是"+name+",今年"+age+"岁!希望跟你交朋友!");
	}
}

//代理类PersonGirlFriend 
package test.patterns.proxy;
public class PersonGirlFriend implements Person{
	private Person personBoy;
	public Person getPersonBoy() {
		return personBoy;
	}
	public void setPersonBoy(Person personBoy) {
		this.personBoy = personBoy;
	}
	public PersonGirlFriend(Person personBoy) {
		this.personBoy=personBoy;
	}
	@Override
	public void sayHi() {
		if(((PersonBoy) personBoy).getAge()>20){    
            System.out.println("闺蜜说:年龄通过,可以交朋友!你想说什么啊!");
            personBoy.sayHi();
        }else{
            System.out.println("闺蜜说:对不起,你的年龄太小了!");
        }	
	}
}

//应用端ProxyTest
package test.patterns.proxy;
public class TestProxy {
	public static void main(String[] args) {
		//不需要执行额外方法的
	    Person personBoy=new PersonBoy("王二",20);
	    personBoy.sayHi();
	    System.out.println("------------需要判断年龄-----------------");
	    //需要执行额外方法的
	    Person personBoy1=new PersonBoy("张三",19);
	    Person personBoy2=new PersonBoy("李四",21);
	    Person PersonGirlFriend1 =new PersonGirlFriend(personBoy1);
	    Person PersonGirlFriend2 =new PersonGirlFriend(personBoy2);
	    PersonGirlFriend1.sayHi();
	    System.out.println("----------------------------------");
	    PersonGirlFriend2.sayHi();
	}
}

接下来还要总结一下反射,JDK动态代理,spring的依赖注入,串联起来!
  • 大小: 16.4 KB
分享到:
评论

相关推荐

    Java设计模式-代理模式例子

    在这个“Java设计模式-代理模式例子”中,我们将深入探讨代理模式的概念、实现方式以及它在实际开发中的应用。 代理模式的核心思想是为一个对象提供一个替身,这个替身即代理对象,代理对象控制对原对象的访问。在...

    设计模式-代理模式(讲解及其实现代码)

    设计模式-代理模式(讲解及其实现代码)

    java常用设计模式-代理模式

    Java 设计模式 - 代理模式 代理模式(Proxy Pattern)是一种常用的设计模式,提供了间接访问目标对象的一种方式,即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加...

    Java设计模式-代理模式

    代理模式是这些设计模式中的一种,它为其他对象提供一种代理以控制对这个对象的访问。代理模式的核心思想是在目标对象和客户端之间插入一个代理对象,代理对象可以扩展目标对象的功能,同时也能控制对目标对象的访问...

    基于Java的设计模式-代理模式demo的实现(高分课设)

    基于Java的设计模式——代理模式demo的实现(高分课设)个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用...

    JAVA-设计模式-结构型模式-代理模式

    JAVA-设计模式-结构型模式-代理模式

    设计模式--代理模式

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要角色,允许我们通过一个代理类来控制对原对象的访问。在《设计模式:可复用面向对象软件的基础》(通常称为GoF设计模式)中,代理模式被定义为“为其他对象...

    java设计模式-代理模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...

    C++设计模式--基于Qt4开源跨平台开发框架

    《C++设计模式--基于Qt4开源跨平台开发框架》一书主要探讨了如何在C++编程中利用设计模式,并结合Qt4框架进行高效的跨平台应用开发。设计模式是软件工程中的重要概念,它们是经过时间和实践验证的解决特定问题的模板...

    c++设计模式-结构型模式-代理模式

    代理模式是一种在面向对象设计中广泛应用的结构型设计模式,它提供了一种对目标对象进行间接访问的方式,使得客户端可以通过代理对象与真实对象进行交互,而无需直接接触真实对象。这样做的好处包括增加灵活性、控制...

    设计模式-Java语言中的应用

    通过阅读《设计模式-Java语言中的应用》,读者不仅可以掌握设计模式的基本概念和原理,还能学习到如何在实际项目中选择合适的设计模式,以及如何优雅地在Java代码中实现这些模式。这将有助于提升开发者的编程技巧,...

    C++设计模式-基于QT4开源跨平台开发框架 源码

    设计模式分为三大类:创建型模式(如单例、工厂方法、抽象工厂)、结构型模式(如代理、装饰器、适配器)和行为型模式(如观察者、策略、命令)。这些模式都是在特定上下文中解决设计问题的模板,它们可以提高代码的...

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):提供一个统一的接口,用来访问子系统的一组接口。 - 适配器模式(Adapter):使两个接口不兼容的类能够协同工作。 ...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

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

    2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...

    设计模式课件大全

    设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...

    JAVA设计模式--程序设计--反射--注解--泛型

    设计模式包括创建型模式(如单例、工厂方法、抽象工厂等)、结构型模式(如适配器、装饰器、代理等)和行为型模式(如策略、观察者、职责链等)。这些模式提供了良好的可复用性和可扩展性,帮助开发者遵循“开闭原则...

    JAVA设计模式-chm版

    这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...

Global site tag (gtag.js) - Google Analytics