代理模式1

  1. import <a href="http://lib.csdn.net/base/17" class='replace_word' title="Java EE知识库" target='_blank' style='color:#df3434; font-weight:bold;'>Java</a>.lang.reflect.InvocationHandler;
  2. import java.lang.reflect.Method;
  3. import java.lang.reflect.Proxy;
  4. public class ProxyTest {
  5. public static void main(String[] args) {
  6. SaleComputer saleComputer = new ComputerMaker();
  7. InvocationHandler handler = new SaleProxy(saleComputer);
  8. SaleComputer proxy = (SaleComputer)Proxy.newProxyInstance(saleComputer.getClass().getClassLoader(), saleComputer.getClass().getInterfaces(), handler);
  9. proxy.saleComputer("花花");
  10. }
  11. }
  12. interface SaleComputer{ //卖电脑
  13. public void saleComputer(String type);
  14. }
  15. class ComputerMaker implements SaleComputer{
  16. public void saleComputer(String type) {
  17. System.out.println("卖出一台 " + type +" 牌电脑!");
  18. }
  19. }
  20. class SaleProxy implements InvocationHandler{
  21. Object delegate;
  22. public SaleProxy(Object delegate) {
  23. this.delegate = delegate;
  24. }
  25. public Object invoke(Object proxy, Method method, Object[] args)
  26. throws Throwable {
  27. giveMouse();
  28. return method.invoke(delegate,args);
  29. }
  30. private void giveMouse(){
  31. System.out.println("送鼠标...............");
  32. }
  33. }

代理模式2

  1. public class ProxyTest1 {
  2. public static void main(String[] args) {
  3. SaleComputer1 saleComputer = new ComputerMaker1();
  4. SaleComputer1 proxy = new SaleProxy1(saleComputer);
  5. proxy.saleComputer("鸿润");
  6. }
  7. }
  8. interface SaleComputer1{ //接口
  9. public void saleComputer(String type);
  10. }
  11. class ComputerMaker1 implements SaleComputer1{//实现类
  12. public void saleComputer(String type) {
  13. System.out.println("卖出一台 " + type +" 牌电脑!");
  14. }
  15. }
  16. class SaleProxy1 implements SaleComputer1{   //代理类
  17. SaleComputer1 delegate;
  18. public SaleProxy1(Object delegate){
  19. this.delegate = (SaleComputer1)delegate;
  20. }
  21. public void saleComputer(String type) {
  22. this.giveMouse();
  23. delegate.saleComputer(type);
  24. }
  25. private void giveMouse(){
  26. System.out.println("送鼠标...............");
  27. }
  28. }

 观察者模式:

  1. package com.model;
  2. import java.util.Observable;
  3. import java.util.Observer;
  4. /**
  5. Java的API为我们提供了Observer接口和Observable类来实现所谓观察者模式。
  6. Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
  7. */
  8. public class TestObserver{
  9. public static void main(String[] args){
  10. Produce produce = new Produce();
  11. NameObserver nameObserver = new NameObserver();
  12. PriceObserver priceObserver = new PriceObserver();
  13. produce.addObserver(nameObserver);
  14. produce.addObserver(priceObserver);
  15. produce.setName("Apple");
  16. produce.setPrice(100);
  17. }
  18. }
  19. //一个可观察者
  20. class Produce extends Observable{
  21. private String name;
  22. private Integer price;
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. setChanged();          //设置变化点
  29. notifyObservers(name); //通知观察者
  30. }
  31. public Integer getPrice() {
  32. return price;
  33. }
  34. public void setPrice(Integer price) {
  35. this.price = price;
  36. setChanged();
  37. notifyObservers(price);
  38. }
  39. }
  40. //两个观察者
  41. class NameObserver implements Observer{
  42. public void update(Observable o, Object arg) {
  43. if(arg instanceof String){
  44. System.out.println("观察者观察到:产品名字已经改为: " +  arg);
  45. }
  46. }
  47. }
  48. class PriceObserver implements Observer{
  49. public void update(Observable o, Object arg) {
  50. if(arg instanceof Integer){
  51. System.out.println("观察者观察到:价格已经改为: " +  arg);
  52. }
  53. }
  54. }

java 代理模式,观察者模式的更多相关文章

  1. Java代理模式

    java代理模式及动态代理类 1.      代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...

  2. Java代理模式示例程序

    Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...

  3. java 代理模式 总结

    1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...

  4. 浅谈java代理模式

    讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...

  5. Java代理模式/静态代理/动态代理

    代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...

  6. JAVA代理模式与动态代理模式

    1.代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用.代理模式给某 ...

  7. java 代理模式一: 静态代理

    代理模式: 代理模式的作用:为其他对象提供一种代理以控制对 特定对象  的访问. 某种情况下,一个客户不想或者直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用:通过代理对象引用. ...

  8. 18 java 代理模式 (转)

    静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...

  9. JAVA 代理模式(Proxy)

    1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...

随机推荐

  1. DICOMDIR

    DICOMDIR 是一个可变长度 迷你 database 文件.由 group (0002, xxxx) 和 group (0004, xxxx) 为主题.描述的是一个 4 层的树状结构 (tree ...

  2. C#获取相对路径[转]

    C#最常使用的相对路径是从当前程序所在路径开始相对寻径,找到要找的路径,即以下两种最简单的方式: 1. 程序根目录.(即exe程序所在路径) //下面两个路径是等价的,都是exe程序所在路径(通常是b ...

  3. wifi连接android设备进行调试

    手机下载终端模拟器: 并输入例如以下$ su # setprop service.abd.tcp.port 5555 # stop adbd # start adbd 在cmd中输入adb conne ...

  4. 【转】svn 的开发目录结构和流程

    原文: https://blog.csdn.net/iteye_15570/article/details/82548132 ------------------------------------- ...

  5. System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

  6. RS中的关系引用不明确以及行列自动添加了追溯

    问题1:由于在FM模型的物理层是自己新建了查询主题,查询主题采用对已经存在的表进行sql处理然后重命名, 使用的是sql类型的数据源,sql类型设置的查询类型是默认的cognos类型,而语法是本地的结 ...

  7. 步步为营_Android开发课[3]_Activity学习

    Focus on technology, enjoy life! -- QQ:804212028 浏览链接:http://blog.csdn.net/y18334702058/article/deta ...

  8. wifidog 移植到MIPS平台

    使用的是一款Broadcom的芯片,现在上面运行wifidog实现认证上网的功能.由于不是openwrt平台,所以就没了make menuconfig 勾选就能自动编译到版本中的.所以想使用交叉编译的 ...

  9. Javascript的解析器

    Carakan C/C++ http://my.opera.com/core/blog/2009/02... SquirrelFish C++ http://trac.webkit.org/wiki/ ...

  10. 算法笔记_032:最长回文串(Java)

    目录 1 问题描述 2 解决方案 2.1 中心扩展法 2.2 Manacher算法   1 问题描述 给定一个字符串,求它的最长回文子串的长度. 2 解决方案 2.1 中心扩展法 此处,首先枚举出回文 ...