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