To be, or not to be: that is the question.

                 ——《哈姆雷特》

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

上代码:

 package cn.no4.proxy;

 public interface IMakeMoney {

     void makeMoney();
}
 package cn.no4.proxy;

 public class Proxy implements IMakeMoney {

     private Boss boss;

     public Proxy() {
boss = new Boss();
} @Override
public void makeMoney() {
System.out.println("表面上是proxy在做事情...");
boss.makeMoney();
} }
 package cn.no4.proxy;

 public class Boss implements IMakeMoney{

     private double money;

     public double getMoney() {
return money;
} public void setMoney(double money) {
this.money = money;
} @Override
public void makeMoney() { money += ;
System.out.println("实际上是幕后黑手大boss干的,大boss得到了$"+money);
} }

测试类:

 package cn.no4.proxy;

 public class _Test {

     public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.makeMoney();
}
}

下面修改了Proxy类的makeMoney方法,实现了对boss对象访问的控制:

 package cn.no4.proxy.instance;

 public class Proxy implements IMakeMoney {

     private Boss boss;

     public Proxy() {
boss = new Boss();
} @Override
public void makeMoney(double money) {
System.out.println("表面上是proxy在做事情...");
//以下代码实现了对boss访问的控制
if (money < 5000000.0) {
System.out.println("钱太少,打发要饭的呢!");
}else{
boss.makeMoney(money);
}
} }

测试类:

 package cn.no4.proxy.instance;

 public class _Test {

     public static void main(String[] args) {
Proxy proxy = new Proxy();
proxy.makeMoney();
proxy.makeMoney();
}
}
proxy.makeMoney(1);无法访问到boss对象,因为1块钱对于boss来讲太少了
proxy.makeMoney(5000000);这下可以访问到boss对象了,执行了boss的makeMoney方法
 

Java学习笔记——设计模式之四.代理模式的更多相关文章

  1. Java学习笔记——设计模式之八.外观模式

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 子系统: package cn.happy.design_patter ...

  2. Java学习笔记——设计模式之七.模板方法模式

    模板方法模式(TemplateMethod),定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 结构图: 代码: 算法骨架 ...

  3. Java学习笔记——设计模式之六.原型模式(浅克隆和深克隆)

    That there's some good in this world, Mr. Frodo. And it's worth fighting for. 原型模式(prototype),用原型实例指 ...

  4. 【设计模式】学习笔记17:代理模式之保护代理与Java反射

    本文出自   http://blog.csdn.net/shuangde800 本笔记内容: 1. Java动态代理,反射机制 2. 保护代理 3. 应用保护代理实现的约会系统 ----------- ...

  5. 【设计模式】学习笔记15:代理模式(Proxy Pattern)

    本文出自   http://blog.csdn.net/shuangde800 本笔记内容: 1. JAVA远程代理调用(RMI) 2. 代理模式 走进代理模式 在上一篇的状态模式中,我们实现了一个糖 ...

  6. C#设计模式学习笔记:(12)代理模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7814004.html,记录一下学习过程以备后续查用. 一.引言 今天我们要讲结构型设计模式的第七个模式,也是 ...

  7. 学习javascript设计模式之代理模式

    1.代理模式为一个对象提供一个代用品或占位符,以便控制对它的访问. 2.不用代理模式: 客户 -> 本体  使用代理模式:  客户 -> 代理 -> 本体 3.例子场景1 点击操作与 ...

  8. Java学习笔记——设计模式之二.策略模式

    明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...

  9. Java学习笔记——设计模式之九.建造者模式

     建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...

随机推荐

  1. python的with语句,超级强大

    With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Python的with语句提供了一种非常方便的处理方式.一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取 ...

  2. vs2012 asp调试设置 清单目录

    在web.cong中添加 <system.webServer> <directoryBrowse enabled="true" /> </system ...

  3. sql server删除主键约束所想到的

    从网上找到了下面一段代码: declare @Pk varchar(100);select @Pk=Name from sysobjects where Parent_Obj=OBJECT_ID('表 ...

  4. [原]C#与非托管——初体验

    P/Invokes初看起来非常简单,利用DllImport进行extern函数的声明,程序就可以在调用extern函数的时候自动查询调用到对应的非托管函数,有些类似Java的native函数,但更为简 ...

  5. 1.XML规范

    1.1 XML命名规范 XML 元素必须遵循以下命名规则: • 名称可以含字母.数字以及其他的字符 • 名称不能以数字或者标点符号开始 • 名称不能以字符“xml”(或者XML.Xml)开始 • 名称 ...

  6. window.onload与document.ready的区别

    1. window.onload必须等到网页中所有的内容加载完(包含图片)才执行 document.ready网页中所有DOM结构绘制完执行,可能DOM并没有加载完 所有document.ready比 ...

  7. spring+mybatis事务不起作用的原因

    一.场景再现 @Override @Transactional public void updateById(String userId,String username) throws Excepti ...

  8. Mybatis基础学习(四)—关系映射

    一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders ...

  9. 插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数

    首先我们先介绍一下普通的插排,就是我们现在一般写的那种,效率是O(n^2)的. 普通的插排基于的思想就是找位置,然后插入进去,其他在它后面的元素全部后移,下面是普通插排的代码: #include< ...

  10. jquery判断邮箱对错

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...