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,"保存数据");
    }
}

猜你喜欢

转载自blog.csdn.net/yanwenyuan0304/article/details/105269704