代理模式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. environmentmap in unity

    真崩溃之前明明找到这个api了 然后没存 然后我就找不到了... 刚刚遇到个特别邪门的问题 调着调着 vs的断点都显示无效 重启unity vs 电脑都不好使 之后我双击了breakpoint窗口.. ...

  2. CentOS6.4下Samba服务器的安装与配置

    一.先恶狠狠地吐槽一下: 这篇随笔真是让我折腾了2天2夜才敢下笔写!!!为什么呢?之前是通过去Samba的官网下载的源码包,也就是.tar.gz来进行安装配置,不过这个让我折腾来折腾去就是没折腾出结果 ...

  3. 对SVM的个人理解---浅显易懂

    原文:http://blog.csdn.net/arthur503/article/details/19966891 之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将 ...

  4. ASP.NET HTTP404错误怎么办

    如图所示,HTTP404错误. 这是由于没有安装ASP.NET导致的.我们在控制面板->打开或关闭windows功能->Internet信息服务->万维网服务->应用程序开发功 ...

  5. java实现顺序链表

    C&C++是那么难学,以至于我连指针是什么都不知道.所以只能学习java了. 如今想用java实现N年前学过“数据结构(c语言版)”却又是那么吃力! 慢慢练吧! 写此博客,仅标记自己学过数据结 ...

  6. Open War I: 野王复活与视野,望远镜视野,近距离射击,远程狙击

    Below demos For: 1- 野王复活与视野,近距离射击. 2- 野王视野之外,无法近距离射击,实现望远镜视野, 远程狙击 Share the source codes with your ...

  7. SpringMVC配置全局日期转换器,处理日期转换异常

    Spring 3.1.1使用Mvc配置全局日期转换器,处理日期转换异常链接地址: https://www.2cto.com/kf/201308/236837.html spring3.0配置日期转换可 ...

  8. u32、u16、u8 数据类型

    #define U32 unsigned int #define U16 unsigned short #define S32 int #define S16 short int #define U8 ...

  9. 显示游戏FPS帧率的几种计算方式

    FPSDisplay.cs using UnityEngine; using System.Collections; public class FPSDisplay : MonoBehaviour { ...

  10. Geolocation 地理定位

    地理位置(Geolocation)是 HTML5 的重要特性之一,提供了确定用户位置的功能,借助这个特性能够开发基于位置信息的应用.今天这篇文章向大家介绍一下 HTML5 地理位置定位的基本原理及各个 ...