AOP面向切面架構設計

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,"保存數據");
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章