写本系列文章仅仅是为了总结自己学安卓所经历的历程和写给初学者作参考用。【高手大鸟勿喷,谢谢合作】
假定框架给出了下面几个类:
package abstract_classs;
public abstract class Shape {
public String info;
public Shape(String info)
{
this.info=info;
}
public abstract void draw();
}
package concrete_classs;
import abstract_classs.Shape;
public class Circle extends Shape{
public Circle(String info)
{
super(info);
}
@Override
public void draw() {
System.out.println(super.info);
}
}
package abstract_classs;
public abstract class View {
public Shape shape;
public View(Shape shape)
{
this.shape=shape;
this.display();
}
public abstract void display();
}
现在我们要创建自己的View类,例如TextView,因为有了上面框架,我们的TextView只需继承View类即可:
但是因为父类View中预设了子类一定要实现public abstract void display()方法,这种行为便是反向调用模式。这种做法的好处在于:1.变被动为主动(平时我们都是主动调用库函数);2,封装了一些程序员不需要
关心的细节(从下面可以看出,程序员只要继承View类并实现public abstract void display()方法即可。3,一个设计得好的框架可以大大加快软件开发的周期,(例如dotNet 的Framework,程序员只需要用鼠标拖动几个控件就可以设计出优美的应用程序界面。)但框架也有其坏处:1,封装了太多的细节,即使程序员对大部分API(Application Programming Interface)掌握得很熟练了,但只知其然,不知其所已然的大有人在。(例如,对于Struts,Spring,Hibernate,很多人自认为学会了,其实不然,当让他写个东西出来,都不会)2,任何框架都有走向没落的可能(例如J2ME,塞班系统),假如只一味地掌握如何用框架,而不了解款架的原理,当框架走到尽头的同时也是程序员穷途之时。这也是我之前说刚学会了一点皮毛就迫不及待地去搞软件开发,界面设计不可取的原因。
package concrete_classs;
import abstract_classs.Shape;
import abstract_classs.View;
public class TextView extends View {
public TextView(Shape shape) {
super(shape);
}
@Override
public void display() {
super.shape.draw();
}
public static void main(String[] args) {
Shape shape = new Circle("Cirle");
TextView txtView = new TextView(shape);
}
}
运行结果:
Cirle
To Be Continue.......