最简单的Java框架
框架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);
}
}
注意,框架一般使用的技术就是反射和回调。
- tool.God利用反射和配置文件创建某个对象,
- Main调用f.op(double,double),详细的方法体由上层代码提供。
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
回调使得编写上层模块的程序猿有了新的体验——填空式编程。
这就有了库与框架的差别——上层模块的程序猿直接调用的,属于库函数;要求上层模块的程序猿提供的回调函数的,属于框架。
假设我们通吃上层和下层,设计框架时使用回调机制;假设我们让愚蠢的应用程序猿填空,哈哈,我们告诉他们一个术语——控制反转。
假设我们是框架的应用程序猿,...好吧,我们也设计一个框架,控制反转。
最简单的Java框架的更多相关文章
- AsMVC:一个简单的MVC框架的Java实现
当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍sp ...
- 分布式架构的基石.简单的 RPC 框架实现(JAVA)
前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...
- Java实现简单的RPC框架(美团面试)
一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...
- Java框架介绍-13个不容错过的框架项目
本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)
然后是项目下的文件:完整的项目请看 上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...
- 对java框架的几点认识
java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...
- 2016年7款最流行的Java框架
虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...
- 简单聊聊java中的final关键字
简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们 ...
- 简单实现springmvc框架(servlet+自定义注解)
个人水平比较菜,没有这么高的实力简单实现springmvc框架,我是看了一个老哥的博客,这老哥才是大神! 原文链接:https://www.cnblogs.com/xdp-gacl/p/4101727 ...
随机推荐
- iTextSharp使用字体设置摘录
用iTextSharp做pdf转换的时候,需要添加水印.文字水印的时候,需要设置字体,查了下文档.摘录下解决方案. iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体 ...
- Mac Eclipse+Maven+TestNg+ReportNg 生成测试报告
TestNG 是java 的单元测试框架,功能很强大,很方便,但是自动生成的测试报告有待改善,可以使用TestNg 自带的TestNG_xslt更改TestNG报告的样式,这里主要讲解ReportNg ...
- c/c++ 动态申请数组
new和delete运算符用于动态分配和撤销内存的运算符 new使用方法: 1. 开辟单变量地址空间 1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.in ...
- HDU 4876 ZCC loves cards _(:зゝ∠)_ 随机输出保平安
GG,,,g艹 #include <cstdio> #include <iostream> #include <algorithm> #include <st ...
- Swift - AnyObject与Any的区别
1,AnyObject :代表任何class类型的对象实例. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Man{ } class Woman{ ...
- Unable to instantiate activity ComponentInfo或java.lang.ClassNotFoundException: com.ibright.herolegen
不知道怎么回事,在libs中添加了jar包后,无法给jar包附加上源码,于是采取以下措施: 删除自动生成的依赖: 在Android Dependences目录上右击->Build Path -& ...
- json转String 和 String转json 和判断对象类型
function ajaxGetMenuList(){ $.getJSON("login.do", function(json){ var r = ""; zN ...
- A*寻路算法的实现
原理:http://www.cppblog.com/christanxw/archive/2006/04/07/5126.html 算法理论请到原理这个传送门,代码中的注释,已经比较详细,所以我不会讲 ...
- 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量 InnoDB 使用bac ...
- BAD packet signature 18245 错误解决
1.错误信息 2014-7-15 2:46:38 org.apache.jk.common.MsgAjp processHeader 严重: BAD packet signature 18245 20 ...