代理模式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. Android系统信息获取

    在Android中可以通过android.os.Build这个类和System.getProperty(“xxx”);来获取设备信息,下面列举的常见设备信息摘自Android群英传 Build.BOA ...

  2. pacific-atlantic-water-flow(不错)

    https://leetcode.com/problems/pacific-atlantic-water-flow/ // 其实,这道题目可以参考前面的那道:Trapping Rain Water I ...

  3. 设备树(Device Tree)

    设备树介绍: 设备树是一个描述设备硬件资源的文件,该文件是由节点组成的树形结构.如下: / { node1 { a-string-property = "A string"; a- ...

  4. css背景颜色渐变

    1.效果 2.代码 /* 基本色 */ background: #3FB0AC; /* chrome 2+, safari 4+; multiple color stops */ background ...

  5. 【Linux】Dockerfile,ubuntu默认shell不是bash?RUN source命令报错!

    Dash is not bash 在一些 docker 官方 Image 中,执行一些 .sh 文件的时候遇到了一些奇怪现象,比如: 1 2 3 # Run something like: [[ $A ...

  6. 比较String.substring()、String.slice()、String.substr()的区别

    String.substring().String.slice().String.substr()这三者都能从String字符串中截取一部分,那么它们在使用上有什么不同么? 一.slice() 方法提 ...

  7. Oracle PL/SQL语句基础学习笔记(上)

    PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE server和其它工具中了,近几年中很多其它的开发者和DBA開始使用PL/SQL,本文将讲述PL ...

  8. HDU4626+博弈

    博弈... /* 博弈 对于当前人来说,如果完成自己的操作后,若mat[n][m]==0,则自己是胜者. 因为 如果mat其他位置不存在1了,肯定自己胜:如果存在1,则让下一位去反转那个1. */ # ...

  9. PHP 杂项函数

    PHP 杂项 函数 PHP 杂项函数简介 我们把不属于其他类别的函数归纳到杂项函数类别. 安装 杂项函数是 PHP 核心的组成部分.无需安装即可使用这些函数. Runtime 配置 杂项函数的行为受 ...

  10. Android下文件的压缩和解压(Zip格式)

    Zip文件结构 ZIP文件结构如下图所示, File Entry表示一个文件实体,一个压缩文件中有多个文件实体. 文件实体由一个头部和文件数据组,Central Directory由多个File he ...