设计模式

android源码中使用的设计模式(结构型模式--代理模式,行为

2018-01-02  本文已影响0人  田间小鹿

1.代理模式

1.1定义

为其他对象提供一种代理以控制对这个对象的访问。

1.2 UML

代理模式

PS:代理类对被代理对象有控制权,可以决定代理类是否执行

1.3使用场景

当不想直接访问或者访问某个对象困难时,可以通过代理访问这个对象,访问对象和被访问对象有一个共同的接口。

1.4 Java中的动态代理

Java动态代理类

java动态代理位于java.lang.reflect包下,一般主要涉及到以下两个类:

  1. Protected Proxy(InvocationHandler h):构造函数,用于给内部的h赋值
  2. Static Class getProxyClass (ClassLoader loader, Class[] interfaces):获得一个 代理类,其中loader是类装载器,interfaces是真实类所拥有的全部接口的数组。
  3. Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
    返回代理类的一个实例,返回后的代理类可以当作被代理类使用 (可使用被代理类的在Subject接口中声明过的方法)。

1.5 代码实现

A.动态代理和静态代理一样的部分

Subject:抽象主题

subject

realSubject:具体实现类

RealSubject

B.不要一样的部分

1.静态代理

PoxySubject

2.静态代理调用

client

3.动态代理

动态代理

4.动态代理调用

动态代理调用

1.6 android源码中的实现

android源码中的代理模式

2.迭代器模式

2.1 定义

提供一中方法顺序访问一个容器对象的各个元素,而且不需要暴露该对象的内部表示。

2.2 UML

迭代器模式

2.3 具体实现

1.创建Iterator

public interface Iterator<T> {
    boolean hasNaxt();
    T next();
}

2.创建ConcreteIterator

具体实现

3.创建aggregate

public interface Aggregat<T> {
    void add(T obj);
 
    void remove(T obj);
 
    Iterator<T> iterator();
}

4.创建具体的aggregate

关联

5.调用方法

调用方法

2.4 adroid源码中的模式实现

上一篇 下一篇

猜你喜欢

热点阅读