最近在做室内导航项目,在进度过程中由于代码写的不太规范,遂决定先学习Android设计模式,在这几天的学习中,对Android的理解更上一个台阶。
比较常用的几种设计模式为以下几种
- 观察者模式
- 适配器模式
- 代理模式
- 工厂模式
- 单例模式
- 命令模式
后期也会讲解springMVC设计模式等一些常用的设计模式,这里主要是为了深入了解Android系统。
1 观察者模式定义
观察者模式主要是定义了一种两个对象之间的关系,当一个对象的状态发生变化时,另一个对象也会update。
2 观察者模式URL模型图
Subject中定义要添加的观察者,ConcreteSubject是具体的被观察者,interface中定义了观察者要实现的更新接口,当被观察者状态发生改变时,则观察者也会更新。
3 源码解析
首先创建被观察者,使被观察者继承Observable类
public class MyPerson extends Observable {
private int age;
private String name;
private String sax;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
setChanged();
notifyObservers();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers();
}
public String getSax() {
return sax;
}
public void setSax(String sax) {
this.sax = sax;
}
@Override
public String toString() {
return "MyPerson [age=" + age + ", name=" + name + ", sax=" + sax + "]";
}
}
接着需要创建观察者类,使其实现Observer接口
public class MyObserver implements Observer {
private int i;
private MyPerson myPerson;//观察的对象
public MyObserver(int i){
System.out.println("我是观察者---->" + i);
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public MyPerson getMyPerson() {
return myPerson;
}
public void setMyPerson(MyPerson myPerson) {
this.myPerson = myPerson;
}
@Override
public void update(Observable observable, Object data) {
System.out.println("观察者---->"+ i +"得到更新!");
this.myPerson = (MyPerson)observable;
System.out.println(((MyPerson)observable).toString());
}
}
在主线程中使用handler进行更新。