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.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉 ...
随机推荐
- (剑指Offer)面试题41:和为s的连续正数序列
题目: 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数).例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5,,4-6和7-8. 思路: ...
- PostgreSQL流复制参数max_wal_senders详解
转自:http://my.oschina.net/Kenyon/blog/152234PostgreSQL 9.2.4 主机:192.25.10.76 从机:192.25.10.71 做postgre ...
- 【数据压缩】LZW算法原理与源代码解析
转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/50331883 <勿在浮沙筑高台> LZW压缩算法原理很easy,因 ...
- 定义查询构建器IFeatureLayerDefinition
在宗地出图,需要实现,只显示某一户人的地块.在ArcMap里,有个定义查询,可只显示过滤后的要素. 在代码中,也比较好实现,使用IFeatureLayerDefinition接口即可. IFeatur ...
- UITextView 添加 pleaceholder
UITextView 默认没有 pleaceholder属性: 我们可以通过多种方式添加 在UITextView的代理方法中写 - (void)textViewDidBeginEditing:(UIT ...
- Java程序实现密钥库的维护
1 Java程序列出密钥库所有条目 import java.util.*; import java.io.*; import java.security.*; public class ShowAli ...
- How to add a button in the seletions "More"
<?xml version="1.0" encoding="utf-8"?> <openerp> <data> <re ...
- 动画曲线demo
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 为啥Android手机总会越用越慢?
转自:http://www.androidchina.net/818.html 根据第三方的调研数据显示,有77%的Android手机用户承认自己曾遭遇过手机变慢的影响,百度搜索“Android+卡慢 ...
- 查询MYSQl数据表中的最后一条记录
mysql: select * from table order by id DESC limit 1 oracle: select * from emp where id in (select ma ...