java 代理模式,观察者模式
代理模式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;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- public class ProxyTest {
- public static void main(String[] args) {
- SaleComputer saleComputer = new ComputerMaker();
- InvocationHandler handler = new SaleProxy(saleComputer);
- SaleComputer proxy = (SaleComputer)Proxy.newProxyInstance(saleComputer.getClass().getClassLoader(), saleComputer.getClass().getInterfaces(), handler);
- proxy.saleComputer("花花");
- }
- }
- interface SaleComputer{ //卖电脑
- public void saleComputer(String type);
- }
- class ComputerMaker implements SaleComputer{
- public void saleComputer(String type) {
- System.out.println("卖出一台 " + type +" 牌电脑!");
- }
- }
- class SaleProxy implements InvocationHandler{
- Object delegate;
- public SaleProxy(Object delegate) {
- this.delegate = delegate;
- }
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- giveMouse();
- return method.invoke(delegate,args);
- }
- private void giveMouse(){
- System.out.println("送鼠标...............");
- }
- }
代理模式2
- public class ProxyTest1 {
- public static void main(String[] args) {
- SaleComputer1 saleComputer = new ComputerMaker1();
- SaleComputer1 proxy = new SaleProxy1(saleComputer);
- proxy.saleComputer("鸿润");
- }
- }
- interface SaleComputer1{ //接口
- public void saleComputer(String type);
- }
- class ComputerMaker1 implements SaleComputer1{//实现类
- public void saleComputer(String type) {
- System.out.println("卖出一台 " + type +" 牌电脑!");
- }
- }
- class SaleProxy1 implements SaleComputer1{ //代理类
- SaleComputer1 delegate;
- public SaleProxy1(Object delegate){
- this.delegate = (SaleComputer1)delegate;
- }
- public void saleComputer(String type) {
- this.giveMouse();
- delegate.saleComputer(type);
- }
- private void giveMouse(){
- System.out.println("送鼠标...............");
- }
- }
观察者模式:
- package com.model;
- import java.util.Observable;
- import java.util.Observer;
- /**
- Java的API为我们提供了Observer接口和Observable类来实现所谓观察者模式。
- Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
- */
- public class TestObserver{
- public static void main(String[] args){
- Produce produce = new Produce();
- NameObserver nameObserver = new NameObserver();
- PriceObserver priceObserver = new PriceObserver();
- produce.addObserver(nameObserver);
- produce.addObserver(priceObserver);
- produce.setName("Apple");
- produce.setPrice(100);
- }
- }
- //一个可观察者
- class Produce extends Observable{
- private String name;
- private Integer price;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- setChanged(); //设置变化点
- notifyObservers(name); //通知观察者
- }
- public Integer getPrice() {
- return price;
- }
- public void setPrice(Integer price) {
- this.price = price;
- setChanged();
- notifyObservers(price);
- }
- }
- //两个观察者
- class NameObserver implements Observer{
- public void update(Observable o, Object arg) {
- if(arg instanceof String){
- System.out.println("观察者观察到:产品名字已经改为: " + arg);
- }
- }
- }
- class PriceObserver implements Observer{
- public void update(Observable o, Object arg) {
- if(arg instanceof Integer){
- System.out.println("观察者观察到:价格已经改为: " + arg);
- }
- }
- }
java 代理模式,观察者模式的更多相关文章
- Java代理模式
java代理模式及动态代理类 1. 代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目 ...
- Java代理模式示例程序
Java代理模式示例程序 当然不是我想出来的,是我看的一个网上教程里的. 模拟的是一个对电脑公司的代理 真实类的接口: public interface SaleComputer { public S ...
- java 代理模式 总结
1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...
- 浅谈java代理模式
讲解java代理模式 目录 讲解java代理模式 何谓代理模式 静态代理 动态代理 JDK动态代理 CGLIB动态代理 何谓代理模式 代理模式,即Proxy Pattern,23种java常用设计模式 ...
- Java代理模式/静态代理/动态代理
代理模式:即Proxy Pattern,常用的设计模式之一.代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问. 代理概念 :为某个对象提供一个代理,以控制对这个对象的访问. 代理类和委 ...
- JAVA代理模式与动态代理模式
1.代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用.代理模式给某 ...
- java 代理模式一: 静态代理
代理模式: 代理模式的作用:为其他对象提供一种代理以控制对 特定对象 的访问. 某种情况下,一个客户不想或者直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用:通过代理对象引用. ...
- 18 java 代理模式 (转)
静态代理 1.新建一个接口,这个接口所提供的方法是关于数据库操作的 public interface EmployeeDao { public void updateSalary(); } 2.建一个 ...
- JAVA 代理模式(Proxy)
1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...
随机推荐
- osglightpoint例子 [转]
该例子演示了光点的效果,主要应用osgSim库中的LightPoint.LightPointNode. SequenceGroup.BlinkSequence,osgSim库属于仿真库,扩展库.应用o ...
- [IDEA]IntelliJ IDEA 报 This license BIG3CLIK6F has been cancelled 错误
JetBrains 最近封杀了lanyus提供的序列号,用的人多了,自然会引起JetBrains的注意. 在激活时,会先在本地做一次验证,然后会把注册码发送到JetBrains的账号服务器上accou ...
- 安装Was liberty之步骤
安装文件下载:http://pan.baidu.com/s/1dDl8PuL 安装三大步骤:拷贝文件,安装VNC和安装WasLiberty 拷贝文件是将需要的文件InstalMgr1.6.2_LNX_ ...
- MFC获得主窗体和父窗体指针
MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg ...
- html5图表
http://www.html5tricks.com/tag/html5图表
- Emacs在RHEL 5上的安装和使用
1. install latest emacs xz -d emacs-24.3.tar.xz tar xvf emacs-24.3.tar ./configure make make install ...
- vb.net 鼠标控制
Public Class Form1 Public Declare Sub mouse_event Lib "user32" Alias "mouse_event&quo ...
- unity3d 版本控制场景合并。
Editor→ProjectSettings→Editor Version Control Mode 设置为 "Visible Meta Files" Asset Serializ ...
- TCP/IP 工具Ping
TCP/IP 工具Ping 在网络中Ping 是一个十分好用的TCP/IP工具.它主要的功能是用来检测网络的连通情况和分析网络速度. C:\Users\gechong>ping /? 用法: p ...
- iOS动画进阶 - 实现炫酷的上拉刷新动效
移动端訪问不佳,请訪问我的个人博客 近期撸了一个上拉刷新的小轮子.仅仅要遵循一个协议就能自己定义自己动效的上拉刷新和载入,我自己也写了几个动效进去,以下是一个比較好的动效的实现过程 先上效果图和git ...