大话设计模式读后感之代理模式(JAVA)

xiaoxiao2021-02-28  127

如果你交给某人一个程序,你将折磨他一整天,如果你教某人如何编写程序,你将折磨他一辈子。

最近学习了设计模式后,发现自己JAVA基础不够扎实,回头开始看《Thinking in java》,吐槽一下。。。文章的翻译好僵硬。。这书真的是推荐给初学者的么。

一、依据故事我所设计的代理模式。

故事:李四请张三帮忙以他的名义把东西送给娇娇。

代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

利用接口实现。。

追求者代理

/** * Created with Intellij IDEA. * User : Yebinghuan * Created on 2017/8/5. * Description : * 假设这个是送礼的人 张三 * 他有这些行为但是没有真正的实体东西 */ public interface Suitors { /** * 送花 */ public void sendFlower(); /** * 送人头 */ public void sendHead(); } 真正的追求者

/** * Created with Intellij IDEA. * User : Yebinghuan * Created on 2017/8/5. * Description : * 这个是真正的追求者 李四 * 他有具体的东西但是他没有去送 */ public class SuitorsImpl implements Suitors { String name; public SuitorsImpl(String name){ this.name=name; } @Override public void sendFlower() { System.err.println("送花给"+name); } @Override public void sendHead() { System.err.println("送人头给"+name); } }

行动Main

Suitors suitors=new SuitorsImpl("娇娇"); //追求者张三 suitors.sendFlower(); suitors.sendHead(); =。=感觉代理是达到了,但是感觉有点不像面向对象, 接口不能作为一个具体对象来看待,应该另外创建一个对象张三来替李四送东西。

那么我们需要新增加一个对象为张三

张三具体类

/** * Created with Intellij IDEA. * User : Yebinghuan * Created on 2017/8/5. * Description : * 该对象为张三 他要替李四送礼 */ public class ZhangsanImpl implements Suitors{ LisiImpl suitors; public ZhangsanImpl(String name) { //我们要拿到李四的请求 suitors= new LisiImpl(name); } @Override public void sendFlower() { //李四想把花送给娇娇,通过张三的手 System.err.println("张三"); suitors.sendFlower(); } @Override public void sendHead() { System.err.println("张三"); suitors.sendHead(); } } 张三 送花给娇娇 张三 送人头给娇娇 该模式定义:李四给了张三xx东西,并要求由 张三去送给娇娇!

JDK中用到代理模式的有

 java.lang.reflect.Proxy

java.rmi.*

=。=木有用过啊。

二、代理模式和运用场景分析

  1、任务清晰,张三只需要知道他要把东西送给娇娇,压根不用管花去哪买的。

  2、扩展性高,张三能帮忙,那么只要条件符合换个王五也一样能做。

  3、 私密性质(个人感觉是设计核心理念),除了娇娇,张三,李四,知道这花是李四送给娇娇的。在其他人眼里 是张三送花给娇娇

根据这3个特性,我最先想到的应用场景

权限控制 的设计方案可以这样玩

全部的权限----李四类

根据调用者权限请多个代理----张三类

加上策略模式,根据不同的调用对象的权限反馈不同的代理。

大致是这种感觉,以上是我读完《大话设计模式之代理模式的读后感》

转载请注明原文地址: https://www.6miu.com/read-21324.html

最新回复(0)