框架framework的目的是定义骨架式方案,处理各种相同的底层细节;而开发人员使用框架时,能够依照自己的需求实现自己的功能——仅仅须要填入自己的东西/flesh。

最简单的框架,类似于JUnit,它有一个main(String[] args)启动本框架。假设是applet或GUI框架,就有太多底层细节须要处理。

  1. package principle.callback.lower;
  2. /**
  3. * 最简单的Java框架
  4. *
  5. * @author yqj2065
  6. * @version 2014.10
  7. */
  8. public interface MyFramework{
  9. public double op(double m,double n);
  10. }

最简单的框架就是一个函数接口lower.MyFramework,它对两个double操作后返回一个double值。

  1. package principle.callback.lower;
  2. import tool.God;
  3. public class Main{
  4. /**
  5. * 命令行启动本框架。
  6. * @param args 至少两个double
  7. */
  8. public static void main(String[] args){
  9. MyFramework f = (MyFramework)God.create("2065");
  10. double d =f.op(Double.parseDouble(args[0]),Double.parseDouble(args[1]));
  11. System.out.println(d);
  12. }
  13. /**
  14. * 和JUnit一样,提供App调用的方式。
  15. */
  16. public static double runFramework(MyFramework f,double x,double y){
  17. return f.op(x,y);
  18. }
  19. }

注意,框架一般使用的技术就是反射和回调

  • tool.God利用反射和配置文件创建某个对象,
  • Main调用f.op(double,double),详细的方法体由上层代码提供。

ok,框架已经设计完毕。


如今是我们应用程序猿干活的时候了。

应用程序猿最開始当然写HelloWorld,来熟悉框架...HelloWorld不可以和高傲的框架在一个包中。

  1. package principle.callback;
  2. public class HelloWorld implements principle.callback.lower.MyFramework{
  3. public double op(double m,double n){
  4. return m+n;
  5. }
  6. }

应用程序猿还要依照框架的要求,自己写好配置文件。假设框架的文档说明:须要在my.properties中定义要创建的对象,于是我们在my.properties中加上:

2065=principle.callback.HelloWorld

接下来在命令行中执行框架,比如:

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

4.6

有时候,我们应用程序猿在应用程序中启动或调用框架,也能够:

  1. package principle.callback;
  2. import tool.God;
  3. import principle.callback.lower.MyFramework;
  4. import principle.callback.lower.Main;
  5. public class App{
  6. public static void main(String[] args){
  7. MyFramework f = (MyFramework)God.create("2065");
  8. double d = Main.runFramework(f,1.2,3.4);
  9. System.out.println(d);
  10. }
  11. }

当然,设计App的程序猿和设计HelloWorld的程序猿同病相怜,自己人就不用反射了:

  1. public static void test(){
  2. double d = Main.runFramework(new HelloWorld(),1,3);
  3. System.out.println(d);
  4.  
  5. MyFramework f = (double m,double n)->{return m * n ;};
  6. d = Main.runFramework(f,1,3);
  7. System.out.println(d);
  8.  
  9. f = (m,n)->{return m +2*n ;};
  10. d = Main.runFramework(f,1,3);
  11. System.out.println(d);
  12. }

输出:

4.0

3.0

7.0

回调使得编写上层模块的程序猿有了新的体验——填空式编程

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

假设我们通吃上层和下层,设计框架时使用回调机制;假设我们让愚蠢的应用程序猿填空,哈哈,我们告诉他们一个术语——控制反转。

假设我们是框架的应用程序猿,...好吧,我们也设计一个框架,控制反转。

最简单的Java框架的更多相关文章

  1. AsMVC:一个简单的MVC框架的Java实现

    当初看了<从零开始写一个Java Web框架>,也跟着写了一遍,但当时学艺不精,真正进脑子里的并不是很多,作者将依赖注入框架和MVC框架写在一起也给我造成了不小的困扰.最近刚好看了一遍sp ...

  2. 分布式架构的基石.简单的 RPC 框架实现(JAVA)

    前言 RPC 的全称是 Remote Procedure Call,它是一种进程间通信方式.允许像调用本地服务一样调用远程服务. 学习来源:<分布式系统架构:原理与实践> - 李林锋 1. ...

  3. Java实现简单的RPC框架(美团面试)

    一.RPC简介 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用) ...

  4. Java框架介绍-13个不容错过的框架项目

    本文转自互联网,个人收藏所用. 下面,我们将一同分享各有趣且颇为实用的Java库,大家请任取所需.不用客气~ 1.极致精简的Java Bootique是一项用于构建无容器可运行Java应用的极简技术. ...

  5. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  6. 对java框架的几点认识

    java框架实在是太多了,网上一抄一大段,根本就了解不到什么.我还是以我的经验来说一下j2ee的框架.1.首先力推struts2框架,这是最经典的框架(可以说没有“之一”).可以帮你快速搭建出一个MV ...

  7. 2016年7款最流行的Java框架

    虽然Java一直被唱衰,但是直到现在Java也坚持霸主地位不动摇,毫无疑问,Java是目前最热门的编程语言之一,所以我们为大家搜集了一些目前比较受欢迎的Java框架的消息. 根据RebelLabs对在 ...

  8. 简单聊聊java中的final关键字

    简单聊聊java中的final关键字 日常代码中,final关键字也算常用的.其主要应用在三个方面: 1)修饰类(暂时见过,但是还没用过); 2)修饰方法(见过,没写过); 3)修饰数据. 那么,我们 ...

  9. 简单实现springmvc框架(servlet+自定义注解)

    个人水平比较菜,没有这么高的实力简单实现springmvc框架,我是看了一个老哥的博客,这老哥才是大神! 原文链接:https://www.cnblogs.com/xdp-gacl/p/4101727 ...

随机推荐

  1. Problem E: Erratic Ants

    这个题没过……!题意:小蚂蚁向四周走,让你在他走过的路中寻找最短路,其中可以反向主要思路:建立想对应的图,寻找最短路径,其中错了好多次,到最后时间没过(1.没有考录反向2.没有考虑走过的路要标记……! ...

  2. Oracle Autonomous Transactions(自治事务)

    Oracle Autonomous Transactions Autonomous transactions allow you to leave the context of the calling ...

  3. HUD 1501 Zipper(记忆化 or DP)

    Problem Description Given three strings, you are to determine whether the third string can be formed ...

  4. 利用手工编码的方式对srtus2进行输入验证

    对action方法进行校验有两种方法一种是: 1手工编码书写 2一种是用xml 输入校验的流程: 1类型转化器对请求参数执行类型转化,并把转换后的值赋给action属性. 2.如果执行类型转化的过程中 ...

  5. ezw证件照芯片压缩算法

    相关网站:http://m.blog.csdn.net/blog/kimwu/12654517 http://blog.sina.com.cn/s/blog_4be751690100bsgb.html ...

  6. pdftk的使用介绍

    首先像下面的一页pdf,如果想把它分成两页,每一页只是一个ppt页面(为了在kindle里读比较方便), 那么可以首先用A-pdf page cut, 将pdf 切成这样12个部分 然后我们现在要的只 ...

  7. 探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB

    探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB 前言:        从Oracle 12c開始,引入了容器数据库的概念,能够实现数据库插拔操作,例如以下图: 如今我们 ...

  8. Object.Instantiate 实例

    static function Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object ...

  9. Burp Suite抓包、截包和改包

    Burp Suite..呵呵.. 听说Burp Suite是能够监測.截取.改动我们訪问web应用的数据包,这么牛X? 条件:本地网络使用代理.由Burp Suite来代理.也就是说,每一个流出外网的 ...

  10. configure: error: zlib not installed

    export LDFLAGS="-L/usr/local/zlib/lib" export CPPFLAGS="-I/usr/local/zlib/include&quo ...