结合Java的回调机制总结OPP的思想,因为Java是自学的,开始抽象类和接口的概念都能理解,别人用也能懂,但等到自己设计的时候总是很生疏,等到做Android时,不停的回调,回调,回调。。。看看源码,一点点的就有了理解,就此来总结一下,有不对的地方还请多指出评批。
语言是用来交谈的,更统概的说是来描述一件事情的逻辑,OPP的理念则是全面的抽象了事情的逻辑,忽略了机器,环境等,所以OPP大多来设计应用,像C语言沟通硬件的则用来控制硬件对外提供接口。
用大家都提的一个回调案例,打电话。
张三有一个问题,"怎样让我变得更帅?",自己没找到方法,于是张三打电话问赵四,赵四此时在工作,一听,这问题真难,得好好想想,赵四就告诉张三:问题太难,容我多想想,想到了再回电话给你。于是赵四一边在工作一边想办法,张三也不能傻等着,就出去逛街了,等着赵四想到方法call他。赵四千想万想,终于找到了办法,于是回电话告诉张三:“使用江湖快要失传的绝学,还我漂漂拳”。
将上述抽象的概括为:一个人A问另一个人B问题,A首先要有两个属于,一是A要问问题,二是A要有B的号码;B有一个属性,想出问题并回电A,于是A还得留下号码等B想到问题之后回电。
首先张三得留下一个方式让别人告诉他结果,这样才逛街和知道结果两不误,于是
//这是一个接口,用来得到答案
public interface CallBack {
//answer为答案
void tellAnswer(String answer);
}
接着定义A类,A类得有B的联系方式,A类能问问题,然后逛街等待结果
public class A implements CallBack {
private B b;
// A有B的联系方式
public A(B b) {
this.b = b;
}
// A有问题需要问
public void askQuestion(String question) {
// 新线程问问题,不能耽误逛街
new Thread(new Runnable() {
@Override
public void run() {
//向B的回答问题方法中传入问题和告知B是谁询问
b.replyQuestion(question, A.this);
}
}).start();
// 接着就去逛街
shopping();
}
// A要逛街
public void shopping() {
}
@Override
public void tellAnswer(String answer) {
// TODO Auto-generated method stub
System.out.println("B告诉A变帅的方法为:" + answer);
}
}
定义B类,拥有回答问题的方法,但此方法需要将结果传出来的参数
public class B {
public String answer;
// 回答问题,首先要知道问题,然后回传答案
public void replyQuestion(String question, CallBack callBack) {
for (int i = 0; i < 100; i++) {
// 对question进行反复思考
answer = "还我漂漂拳";
}
// 通过callBack,将思考得到的结果传出去
callBack.tellAnswer(answer);
}
}
最后在显示这个事件的具体形式
public class Thing {
public static void main(String[] args) {
// B的一个实例,赵四
B zhaosi = new B();
// A的一个实例,张三
A zhangsan = new A(zhaosi);
// 张三问问题
zhangsan.askQuestion("怎样让我变得更帅?");
}
}