一、什么是AOP
关于OOP
大家对于OOP(面向对象编程)肯定不会陌生,核心思想为:万事万物皆对象,OOP推荐开发者把所有的事物当作对象来处理。
假设有一条鱼,我们就可以创建一个Fish类并构造出它的实例来当作是这条鱼并对它进行操作。OOP就是我们把鱼抽象成为Fish类的过程,通过这个过程我们可以获得更加清晰搞笑的逻辑单元划分。
关于AOP
AOP(面向切面编程),这个中文名字翻译的很到位:切面,可以脑部一下假设有一个平面,然后用一个工具去切这个平面,就形成了一个切面的过程。这个平面就是我们的程序,程序里面会有很多功能,像:登录,设置,支付等。假设有一个工具它的作用是检查是否登录,在程序每次支付时要检查是否登录,这个工具就可以像一把刀一样切向支付前的位置,这整个过程就是一个面向切面的过程。
如果你理解了的话其实可以发现OOP和AOP有着本质上的差异。AOP面对的是处理某个过程或步骤,会有切入点,会有切入的动作。然而OOP是一个帮助我们更加清晰搞笑划分事物单元的一种思想。
二、关于AOP的例子
一般我们听到AOP这个名字是在Java后台开发,后台所使用的spring框架一个很核心点就是AOP,通过AOP来解耦。我们作为Android开发人员为什么要去学习这个呢?AOP作为一种编程思想,作用的场景是不区分安卓和后台的,就像各种设计模式,用在合适的地方就能解决痛点。
现在有一个程序,有一个人类的接口,里面有一个方法sayHello()
public interface Person {
void sayHello();
}
和它的实现类:男人
public class Man implements Person {
@Override
public void sayHello() {
Log.i("AopLog", "你好,Android");
}
}
然后我们有3个界面,分别是FirstActivity、SecondActivity、ThirdActivity,3个页面中只有同一个操作,就是让一个男人sayHello
public class FirstActivity extends AppCompatActivity {
Button mSayHello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frist);
mSayHello = findViewById(R.id.sayHello);
mSayHello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
test();
}
});
}
public void test() {
Person man = new Man();
man.sayHello();
}
}
点击按钮输出的结果为:
你好,Android
其实我们只需要关注3个页面中的test()方法就好了。现在我想要在sayHello的前后分别加一行分割线,让输出的结果变成这样:
---------我是上分割线---------
你好,Android
-