本文介绍何谓框架,并提供了一个最简单的框架——对两个double操作后返回一个double值。

1、何谓框架

框架/framework的目的,是定义一个骨架式方案,处理各种应用中面临的共同的底层细节;而应用开发者可以按照自己的需求使用框架,给出自己的功能实现——只需要填入自己的东西/flesh。如果是applet或GUI框架,就有太多底层细节需要处理,因而最简单的框架lower.MyFramework 仅仅说明这是一个骨架式方案——对两个double操作后返回一个double值。在这个骨架式方案,本框架处理了....大量的技术细节,不过代码被省略了。

本框架可以使你对两个double进行各种操作,如相加,比较、求幂等等,你具体如何应用,需要你按照自己的需求提供代码。

package principle.callback.lower;

/**

* 最简单的Java框架

*

* @author yqj2065

* @version 2014.10

*/

public interface MyFramework{

public double op(double m,double n);

}

嗯,最简单的框架就是一个函数接口lower.MyFramework,它对两个double操作后返回一个double值。类似于JUnit,我们还设计了一个包含main(String[] args)启动本框架的类Main。使用本框架时,请在配置文件my.properties中指定将要创建的对象,键为2065。

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,框架已经设计完成。

2.如何使用框架

现在是我们应用程序员干活的时候了。

应用程序员最开始当然写HelloWorld,来熟悉框架..

.HelloWorld不能够和高傲的框架在一个包中,principle.callback.lowe,你可以想象它被打包为一个jar。

框架的使用者,通常进行填空式编程。

这就是库与框架的区别——上层模块的程序员直接调用的,属于库函数;要求上层模块的程序员提供的回调函数的,属于框架。

package principle.callback;

public class HelloWorld implements principle.callback.lower.MyFramework{

public double op(double m,double n){

return m+n;

}

}

第二步,按照框架的要求,自己写好配置文件。于是我们在my.properties中加上下面的键值对:

2065=principle.callback.HelloWorld

第三步,在命令行中运行和测试框架,例如:

E:\designPattern>java principle.callback.lower.Main 1.2 3.4

4.6

通常,我们应用程序员不会在控制台直接启动或调用框架,而是在应用程序中启动或调用框架,这就是框架的Main提供

runFramework(MyFramework ,double,double)的意义。框架的设计者真的很贴心。我们的应用程序如下:

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);

}

}

既然HelloWorld也在本包中,应用程序App可以直接使用它而不用反射。我们也可以在App使用匿名类、λ表达式直接描述自己的需求——不定义太多的HelloWorld这样的类。

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);

}

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);

d = Main.runFramework((m,n)->{return m-n ;},1,3);

System.out.println(d);

}

}运行test()输出:

4.0

3.0

7.0

-2.0

3.何谓控制反转

拜托,在我的术语表中没有控制反转(Inversion of Control,英文缩写为IoC)这个垃圾术语,我不知道它是什么东西。

java 简单框架_最简单的Java框架相关推荐

  1. java编程赋值运算符_跟我学java编程—简单赋值运算符“=”

    赋值运算符是双目运算符,用在赋值表达式中.赋值运算符将值存储在运算符左边操作数指定的变量中.有两种赋值操作,简单赋值和复合赋值,简单赋值把运算符右边的操作数的值存储在运算符左边操作数指定的变量中:复合 ...

  2. java喷泉编码_好程序员Java教程分享使用JS实现简单喷泉效果

    原标题:好程序员Java教程分享使用JS实现简单喷泉效果 好程序员Java教程分享使用JS实现简单喷泉效果,最近,在教学生使用JS的基本操作,为了练习JS的基本作用,特地写了一个喷泉效果,代码如下: ...

  3. java笔试题_一道简单的 Java 笔试题,但值得很多人反思

    专注于Java领域优质技术,欢迎关注 作者:匿蟒 前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问 ...

  4. java云盘_云盘的JAVA简单实现

    [实例简介] 网络硬盘,用jsp+struts+spring编写完成.实现文件管理,文件上传,下载,用户信息管理功能! [实例截图] [核心代码] disk-ssh └── disk ├── src ...

  5. java视频马_【B0718】[java视频教程]某马2019年Java进阶课日志框架视频教程 it教程...

    Java视频教程名称:某马2019年Java进阶课日志框架视频教程      java自学网[javazx.com]  日志框架视频教程   it教程 Java自学网收集整理 java论坛' k&am ...

  6. java 判断类型_如何快速入门Java编程学习(干货)

    一.初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮>起床>洗漱>出宿舍>>吃早餐>到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 ...

  7. java python算法_用Python,Java和C ++示例解释的排序算法

    java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...

  8. java future用法_纯干货:Java学习过程中的21个知识点和技术点

    我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...

  9. java logger使用_这才是JAVA中打印日志的正确姿势

    作者:lrwin 原文链接:http://t.cn/E9BkD7a 使用slf4j 1. 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 2. 实现方式统一使用: Logback框架 打 ...

  10. 做Java头发少_这35个Java代码优化细节,你用了吗

    链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...

最新文章

  1. 任务管理器进程中多个chrome.exe的问题
  2. mysql 自定义函数 时间差_MYSQL自定义函数之返回两个时间的指定类型时差
  3. web容器获取SSL指纹实现和ByPass
  4. 前端学习(1257):基于promise处理ajax请求
  5. bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法
  6. vue项目查看构建后项目报告,项目个模块依赖占比比例情况
  7. Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)
  8. Google 封杀我写的 Web 浏览器!
  9. 什么时候不需要回表?
  10. html5妇女节游戏,三八妇女节趣味小游戏
  11. 我是一个线程(转载自: IBM刘欣)
  12. 我的世界ess服务器信息,我的世界ess指令怎么用 ess指令大全及用法详解
  13. 史玉柱: 我的成功不是偶然
  14. python爬虫音乐犯法么_Python爬虫案例:爬取网易云音乐
  15. 23种设计模式之代理模式
  16. python dict是什么意思,python中的字典是什么
  17. 戴某某说:“内心永无止境的期盼”
  18. PowerBI账户免费注册
  19. angularjs还有前景吗_卡奇乐:在大城市投资儿童乐园还有市场前景吗
  20. s3c6410中断处理

热门文章

  1. PS-twoday-移动工具
  2. 2014年6月份第4周51Aspx源码发布详情
  3. 系统常见电脑蓝屏原因以及解决方法
  4. 如何使用报表工具设置页眉与页脚
  5. 飞凌嵌入式-基于国产A40i核心板-医用呼吸机解决方案
  6. 打补丁文件时候patch -p1命令的含义
  7. 北京央企住房公积金查询网址
  8. 寄居蟹与海葵是一对合作互助的共栖伙伴。海葵是寄居蟹最称职的门卫。它用有毒的触角去蜇那些敢来靠近它们的所有动物,保护寄居蟹。 而寄居蟹则背着行动困难的海葵,四出觅食,有福同享。但并不是所有寄居蟹和海
  9. 【网课视频提取ppt】【原创好用】如何自动提取视频中的PPT画面?网课视频提取ppt教程
  10. Jacobi迭代法分量形式matlab,实验4 Jacobi迭代法和GS迭代