代理模式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. TortoiseSVN 源代码下载

    SVN的客户端软件TortoiseSVN http://tortoisesvn.tigris.org/ 这是我采用的 TortoiseSVN 的官方网站,页面上的两只小乌龟真的很好看. 目前最新的版本 ...

  2. [Compose] 17. List comprehensions with Applicative Functors

    We annihilate the need for the ol' nested for loop using Applicatives. For example we have this kind ...

  3. 表结构设计器(EZDML)1.98版公布

    表结构设计器(EZDML)是一个免费的数据库建表的小软件,可高速的进行数据库表结构设计.建立数据模型,能迅速生成代码模板.简单界面和字典文档,支持脚本编程. 新版本号大概有下面改进: 1.修复了部 ...

  4. linux free命令详解和使用实例(查看内存使用率)

    转载:http://www.jb51.net/LINUXjishu/152017.html 1.命令格式: free [参数] 2.命令功能: free 命令显示系统使用和空闲的内存情况,包括物理内存 ...

  5. 使用Bundle进行VIM插件的管理

    http://www.oschina.net/p/vundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle ...

  6. javaWeb注册,登陆,注销功能的实现

    一:注册页面:regist.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8& ...

  7. 一次寻找IBatisNet事务bug的过程

    本文的上下文环境 操作系统:Win7 x64 Professional 开发工具:Visual Studio 2017   语言:C# 数据库ORM:IBatisNet 1.6.2 一.前言 这个项目 ...

  8. 【Django】pip 安装和卸载 Django

    1.在dos命令中输入pip进行安装 注意:如果提示('pip' 不是内部或外部命令,也不是可运行的程序或批处理文件.) 那么先将pip添加到环境变量中,pip路径一般在python的安装路径下,例如 ...

  9. CSS border 生成三角

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  10. Android体系架构详解

    Andriod是什么? 首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本, ...