代理模式(动态代理静态代理)
不想把一些核心的对象暴露给调用方,但是又需要两边协调的时候用代理模式,android中的例子有activityManagerProxy 代理activityManagerService
AMS管理着activity运行状态的系统进程,是app运行时的核心服务
image.png
观察者模式
定义一个被观察者Observer和多个被观察者Observable,当观察者发生变化的时候,所有被观察者都会接受到通知,android中的使用有Rxjava系列,EventBus
image.png
工厂模式(抽象工厂工厂方法)
工厂模式是创建一个创建型模型,然后通过传入参数用这个模型生成各种不同类型的对象,android中用到的有BitmapFactory
image.png
责任链模式
android里的事件分发机制,责任链模式,像流水一样处理数据,根据不同的拦截器处理,得到最后处理后的结果
public abstract class Postman {//快递员抽象类
protected Postman nextPostman;//下一个快递员
public abstract void handleCourier(String address);//派送快递
}
public class BeijingPostman extends Postman {//北京快递员
@Override
public void handleCourier(String address) {
if (address.equals("Beijing")) {//北京地区的则派送
System.out.println("派送到北京");
return;
} else {//否则交给下一个快递员去处理
nextPostman.handleCourier(address);
}
}
}
public class ShanghaiPostman extends Postman {//上海快递员
@Override
public void handleCourier(String address) {
if (address.equals("Shanghai")) {
System.out.println("派送到上海");
return;
} else {
nextPostman.handleCourier(address);
}
}
}
public class GuangzhouPostman extends Postman {//广州快递员
@Override
public void handleCourier(String address) {
if (address.equals("Guangzhou")) {
System.out.println("派送到广州");
return;
} else {
if (nextPostman != null)
nextPostman.handleCourier(address);
}
}
}
public void test() {
//创建不同的快递员对象
Postman beijingPostman = new BeijingPostman();
Postman shanghaiPostman = new ShanghaiPostman();
Postman guangzhouPostman = new GuangzhouPostman();
//创建下一个结点
beijingPostman.nextPostman=shanghaiPostman;
shanghaiPostman.nextPostman=guangzhouPostman;
//处理不同地区的快递,都是从首结点北京快递员开始
System.out.println("有一个上海快递需要派送:");
beijingPostman.handleCourier("Shanghai");
System.out.println("有一个广州快递需要派送:");
beijingPostman.handleCourier("Guangzhou");
System.out.println("有一个美国快递需要派送:");
beijingPostman.handleCourier("America");
}