设计模式-代理模式
即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设计模式,代理模式,包含动态代理的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
Java 设计模式 代理模式介绍,含源码
自己写的Java的代理模式的实现,有兴趣的可以下载看看
JAVA-设计模式-结构型模式-代理模式
c++设计模式-结构型模式-代理模式,qt工程,c++源码,简单示例
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
动态代理设计模式-源码
设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)
设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...
java模式设计-代理模式之动态代理.ppt
java设计模式视频教程-代理模式, 深层了解java的设计模式
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
java 模式 设计 代理模式 ,动态代理跟反射机制的内容相关
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些...
java设计模式,设计模式公司出品。策略模式,代理模式,单例模式,多例模式,工厂模式,门面模式等。