必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

代理模式,Android常用设计模式之观察者模式

2019-09-19 00:20 来源:未知

图片 1代理模式.png

代理模式:代理模式是对象的结构模式,代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

  在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的:代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

Android常用设计模式之观察者模式

  • 抽象对象角色:AbstractObject 目标对象与代理对象共同接口,任何可以使用目标对象的地方都可以使用代理对象
  • 目标对象角色:RealObject
  • 代理对象角色:ProxyObject

代理模式结构

所谓代理,就是一个人或者机构代表另一个人或者机构采取行动,在一些情况下,一个客户不想或者不能够直接引用一个对象,二代理对象可以在客户端和目标对象中间起到中介的作用。代理模式类图如下:

图片 2Paste_Image.png

在代理模式中的角色:

  • 抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。
  • 目标对象角色:定义了代理对象所代表的目标对象
  • 代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

 

观察者设计模式在Android应用中会经常用到,模式原理类似于这样的场景:

源代码

  • 抽象对象角色
public abstract class AbstractObject{ //操作 public abstract void operation();}
  • 目标对象角色
public class RealObject extends AbstractObject { @override public void operation(){ //一些操作 System.out.println; }}
  • 代理对象角色
public class ProxyObject extends AbstractObject{ RealObject realObject = new RealObject(); @Override public void operation() { //调用目标对象之前可以做相关操作 System.out.println; realObject.operation(); //调用目标对象之后可以做相关操作 System.out.println; }}
  • 客户端
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub AbstractObject obj = new ProxyObject(); obj.operation(); }}

代理模式的结构

  所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

  代理模式类图如下:

  图片 3

  在代理模式中的角色:

  ●  抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。

  ●  目标对象角色:定义了代理对象所代表的目标对象。

  ●  代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

  代理模式的结构

用户订报纸,然后在报社登记,报社来统计用户(添加用户),用户也可以取消订阅,报社删除用户;然后用户观察报社,

public abstract class AbstrctObject { public abstract void doAction();}

public class ProxyObject extends AbstrctObject { RealObject realObject = new RealObject(); @Override public void doAction() { System.out.println("before "); realObject.doAction(); System.out.println; }}

public class RealObject extends AbstrctObject { @Override public void doAction() { System.out.println("RealObject do somethingn"); }}

源代码

  抽象对象角色

public abstract class AbstractObject {
    //操作
    public abstract void operation();
}

  目标对象角色

图片 4

public class RealObject extends AbstractObject {
    @Override
    public void operation() {
        //一些操作
        System.out.println("一些操作");
    }
}

图片 5

  代理对象角色

图片 6

public class ProxyObject extends AbstractObject{
    RealObject realObject = new RealObject();
    @Override
    public void operation() {
        //调用目标对象之前可以做相关操作
        System.out.println("before");        
        realObject.operation();        
        //调用目标对象之后可以做相关操作
        System.out.println("after");
    }
}

图片 7

  客户端

图片 8

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AbstractObject obj = new ProxyObject();
        obj.operation();
    }

}

图片 9

  从上面的例子可以看出代理对象将客户端的调用委派给目标对象,在调用目标对象的方法之前跟之后都可以执行特定的操作。

  代理对象在客户端和目标对象之间起到中介的作用。

当有了新的报纸,报社就告诉用户并发送报纸的用户的手上,这其中,用户是观察者,报社是被观察者,一旦报纸有了新的

 

(数据发生改变)报社就会通知用户;

  代理模式类图如下:

代码示例如下:

  图片 10

首先我们根据用户的共同特征,都要接受报纸,来提取出来一个公共的用户接口

 

1 /**
2  * 用户接口
3  * 
4  * @author jiaocg
5  * 
6  */
7 public interface Users {
8     public void receive();//接受报纸方法
9 }
TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:代理模式,Android常用设计模式之观察者模式