AOP面向切面架構設計
其實是aop是oop的一種延續,和升級。
AOP 的作用
aop可以對業務邏輯各個部分進行分離,從而使我們各個部分之間的耦合度降低,提高程序的可重用性,
AOP在Android上的應用
例如對activity的每個生命週期進行監聽,做統一處理。
具體我們經常在application種使用的ActivityLifecycleCallbacks來監聽各個activity的生命週期。這個就是AOP面向切面的架構設計。
理解AOP
上面說的AOP可能有寫泛泛,不知所云,其實切面思想就是把各個種相同業務部分抽取出來。
例子:操作數據庫的時候一般有四個操作,增刪改查
這裏 增 刪 改 都會有一個相同的操作,就是“備份數據”
具體實現如下
先寫一個增刪改的接口DBOperation
public interface DBOperation {
void insert();
void delete();
void update();
void save();
}
重要的是如何動態代理 在InvocationHandler 的invoke方法中去實現
public class MainActivity extends AppCompatActivity implements DBOperation{
private DBOperation db;
private final static String TAG = "mile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//db = this
db = (DBOperation) Proxy.newProxyInstance(DBOperation.class.getClassLoader(),new Class[]{DBOperation.class},
new DBHandler(this));
}
class DBHandler implements InvocationHandler{
private DBOperation db;
public DBHandler(DBOperation db){
this.db = db;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
if (db != null){
Log.d(TAG,"操作數據庫之前,開始備份。。。");
save();
Log.d(TAG,"數據備份完成,等待操作。。。");
return method.invoke(db,objects);
}
return null;
}
}
//點擊事件
public void jump(View view){
//常規寫法
// db.save();
db.delete();
}
@Override
public void insert() {
Log.d(TAG,"插入數據");
}
@Override
public void delete() {
Log.d(TAG,"刪除數據");
}
@Override
public void update() {
Log.d(TAG,"修改數據");
}
@Override
public void save() {
Log.d(TAG,"保存數據");
}
}