zoukankan      html  css  js  c++  java
  • 最简单的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

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

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

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

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




  • 相关阅读:
    使用reflux进行react组件之间的通信
    一步一步学习underscore的封装和扩展方式
    使用nodewebx进行前后端开发环境分离
    react项目组件化思考
    css模块化策略
    immutableJS一些API
    CSS布局基础之二认识Viewport
    CSS布局基础之一设备像素,设备独立像素,设备像素比,css像素之间的关系
    【云图】如何制作全国KTV查询系统?
    【高德地图API】从零开始学高德JS API(六)——坐标转换
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4011581.html
Copyright © 2011-2022 走看看