框架framework的目的是定义骨架式方案,处理各种同样的底层细节;而开发者使用框架时,可以按照自己的需求实现自己的功能——只需要填入自己的东西/flesh。
最简单的框架,类似于JUnit,它有一个main(String[] args)启动本框架。如果是applet或GUI框架,就有太多底层细节需要处理。
package principle.callback.lower;
/**
* 最简单的Java框架
*
* @author yqj2065
* @version 2014.10
*/
public interface MyFramework{
public double op(double m,double n);
}最简单的框架就是一个函数接口lower.MyFramework,它对两个double操作后返回一个double值。package principle.callback.lower;
import tool.God;
public class Main{
/**
* 命令行启动本框架。
* @param args 至少两个double
*/
public static void main(String[] args){
MyFramework f = (MyFramework)God.create("2065");
double d =f.op(Double.parseDouble(args[0]),Double.parseDouble(args[1]));
System.out.println(d);
}
/**
* 和JUnit一样,提供App调用的方式。
*/
public static double runFramework(MyFramework f,double x,double y){
return f.op(x,y);
}
}
注意,框架一般使用的技术就是反射和回调。
ok,框架已经设计完成。
现在是我们应用程序员干活的时候了。
应用程序员最开始当然写HelloWorld,来熟悉框架...HelloWorld不能够和高傲的框架在一个包中。
package principle.callback;
public class HelloWorld implements principle.callback.lower.MyFramework{
public double op(double m,double n){
return m+n;
}
}应用程序员还要按照框架的要求,自己写好配置文件。如果框架的文档说明:需要在my.properties中定义要创建的对象,于是我们在my.properties中加上:2065=principle.callback.HelloWorld
接下来在命令行中运行框架,例如:
E:\designPattern>java principle.callback.lower.Main 1.2 3.4
4.6
有时候,我们应用程序员在应用程序中启动或调用框架,也可以:
package principle.callback;
import tool.God;
import principle.callback.lower.MyFramework;
import principle.callback.lower.Main;
public class App{
public static void main(String[] args){
MyFramework f = (MyFramework)God.create("2065");
double d = Main.runFramework(f,1.2,3.4);
System.out.println(d);
}
}当然,设计App的程序员和设计HelloWorld的程序员同病相怜,自己人就不用反射了:
public static void test(){
double d = Main.runFramework(new HelloWorld(),1,3);
System.out.println(d);
MyFramework f = (double m,double n)->{return m * n ;};
d = Main.runFramework(f,1,3);
System.out.println(d);
f = (m,n)->{return m +2*n ;};
d = Main.runFramework(f,1,3);
System.out.println(d);
}输出:
4.0
3.0
7.0
回调使得编写上层模块的程序员有了新的体验——填空式编程。
这就有了库与框架的区别——上层模块的程序员直接调用的,属于库函数;要求上层模块的程序员提供的回调函数的,属于框架。
如果我们通吃上层和下层,设计框架时使用回调机制;如果我们让愚蠢的应用程序员填空,哈哈,我们告诉他们一个术语——控制反转。
如果我们是框架的应用程序员,...好吧,我们也设计一个框架,控制反转。
原文地址:http://blog.csdn.net/yqj2065/article/details/39756427