代理模式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. echarts使用记录(二)legend翻页,事件,数据集,设置y轴最大/小值,让series图形从右侧出往左移动

    1.有时候legend比较多的时候,需要做翻页比较好,有个属性legend的type属性设置为scroll,然后animation可以控制动画,官方文档均可查. 再就是scrollDataIndex, ...

  2. 使用百度地图API实现轨迹回放

    调用百度地图API实现路线的轨迹回放功能其实很简单,只要搞懂以下几点即可: 1.需要用Polyline方法先绘制好路线图 2.用Marker添加标注点 3.关键一步,通过结合定时器,使用Marker创 ...

  3. Android -- 再来一发Intent

    之前写过一篇Intent的博客,主要说了一下隐式意图. 传送门:<Android -- Intent> Intent对象构成 Component name.Action.Data.Cate ...

  4. HDU 1710 Binary Tree Traversals(二叉树)

    题目地址:HDU 1710 已知二叉树先序和中序求后序. #include <stdio.h> #include <string.h> int a[1001], cnt; ty ...

  5. 定义查询构建器IFeatureLayerDefinition

    在宗地出图,需要实现,只显示某一户人的地块.在ArcMap里,有个定义查询,可只显示过滤后的要素. 在代码中,也比较好实现,使用IFeatureLayerDefinition接口即可. IFeatur ...

  6. ASP.NET Core Kestrel 随机404错误

    一.Bug 出现 最近遇到一个很诡异的bug,Visual Studio 2017调试ASP.NET Core 2.2 Web程序的时候,随机性的出现404错误.如下图 事实上这个css文件是存在的, ...

  7. 算法笔记_147:有向图欧拉回路判断应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...

  8. 算法笔记_033:十六进制转八进制(Java)

    目录 1 问题描述 2 解决方案 2.1 注意问题 2.2 具体实现代码   1 问题描述 具体问题描述 给定n个十六进制正整数,输出它们对应的八进制数. 输入格式 输入的第一行为一个正整数n (1& ...

  9. 【jquery操作cookie】JQuery中$.cookie()方法的使用(同名cookie会覆盖)

    jquery.cookie.js插件: <script type="text/javascript" src="js/jquery-1.6.2.min.js&quo ...

  10. mysql数据库创建删除带横杠的数据库名

    mysql> create database d-d; ERROR 1064 (42000): You have an error in your SQL syntax; check the m ...