原文:http://www.programcreek.com/2011/09/how-to-design-a-java-framework/

原文和翻译都只是参考,如有不对,欢迎指正。

你可能会好奇框架是如何工作的,我会创建一个简单的框架来演示一下。

框架的目标
首先,为什么我们需要框架而不是库呢?框架的目标是定义一个让开发者实现基于个性化需求的某些功能的过程,换句话说,框架定义了骨架而开发者进行填补。

简单的框架
在下面的例子中,前三个类是框架的一部分,第四个类是该框架的客户端代码。

Main.java是框架的入口点,不能修改。

 //imagine this is the entry point for a framework,it can not be changed
public class Main{
public static void main(String[] args){
Human h=new Human(new Walk());
h.doMove();
}
}

Move.java是钩子,可以让开发者基于他们的需求来定义/继承函数。

 public abstract class Move{
public abstract void action();
}

Human.java是模板,体现了框架是如何工作的。

 public class Human{
private Move move;
public Human(Move m){
this.move=m;
}
public void doMove(){
this.move.action();
}
}

这个简单的框架允许和需要开发者去继承"Move"这个类,事实上,在这个框架里,action方法是开发者唯一能够改变的。

在内部实现中,可以编写不同的"action"达到不同的目的。比如下面的例子是打印出"5 miles per hour",当然,你也可以改为"50 miles per hour"。

 public class Walk extend Move{
@Override
public void action(){
System.out.println("5 miles per hour - it is slow!");
}
}

总结

这个例子只是展示了一个简单的模板和钩子是如何工作的,一个实用的框架比这更复杂,不仅包含了模板-实例之间的关系,而且对于如何有效的提高性能和程序可用性也是很复杂的过程。

如何设计Java框架----一个简单的例子【翻译】的更多相关文章

  1. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  2. Spring-Context之一:一个简单的例子

    很久之前就想系统的学习和掌握Spring框架,但是拖了很久都没有行动.现在趁着在外出差杂事不多,就花时间来由浅入深的研究下Spring框架.Spring框架这几年来已经发展成为一个巨无霸产品.从最初的 ...

  3. Struts2的配置和一个简单的例子

    Struts2的配置和一个简单的例子 笔记仓库:https://github.com/nnngu/LearningNotes 简介 这篇文章主要讲如何在 IntelliJ IDEA 中使用 Strut ...

  4. fitnesse - 一个简单的例子(slim)

    fitnesse - 一个简单的例子(slim) 2017-09-30 目录1 编写测试代码(Fixture code)2 编写wiki page并运行  2.1 新建wikiPage  2.2 运行 ...

  5. 从一个简单的例子谈谈package与import机制

    转,原文:http://annie09.iteye.com/blog/469997 http://blog.csdn.net/gdsy/article/details/398072 这两篇我也不知道到 ...

  6. 用一个简单的例子来理解python高阶函数

    ============================ 用一个简单的例子来理解python高阶函数 ============================ 最近在用mailx发送邮件, 写法大致如 ...

  7. 关于apriori算法的一个简单的例子

    apriori算法是关联规则挖掘中很基础也很经典的一个算法,我认为很多教程出现大堆的公式不是很适合一个初学者理解.因此,本文列举一个简单的例子来演示下apriori算法的整个步骤. 下面这个表格是代表 ...

  8. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  9. 一个简单的例子搞懂ES6之Promise

    ES5中实现异步的常见方式不外乎以下几种: 1. 回调函数 2. 事件驱动 2. 自定义事件(根本上原理同事件驱动相同) 而ES6中的Promise的出现就使得异步变得非常简单.promise中的异步 ...

随机推荐

  1. DRP PK 牛腩新闻发布系统

    一.JSP与ASP (1)Web服务器的支持:大多数通用的Web服务器如:Apache.Netscape和Microsoft IIS都支持JSP页面,只有微软本身的Microsoft IIS和Pers ...

  2. java实现mysql数据库的备份及还原

    备份: public static void backup() { try { Runtime rt = Runtime.getRuntime(); // 调用 调用mysql的安装目录的命令 Pro ...

  3. python之else总结

    python中除了if...elif...else..还有while...else, for...else..., try...except...else...finally... 不管哪种else, ...

  4. 设计模式之原型模式(Prototype)

    1.出现原因 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作:由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口. 如何应对这种变化?如何向“客户程序(使用这些对 ...

  5. 怎样开启SQL数据库服务

    使用数据库时开启服务是需要的,我给大家具体介绍几种方式开启SQL Sever 服务.这几种我都用图文的形式用三个开启方式给你展示,对于不会开启服务的朋友可以学习下,这些前提是你的电脑安装了SQL数据库 ...

  6. mysql存储过程中传decimal值会自动四舍五入,没有小数

    通过 call  proc(0.2,0.5);  查看结果数据库竟然是0  和 1 原因:proc的参数没有设置好 参数:原本是  in a decimal,in b decimal 应该改为:in ...

  7. CoreLocation MKMapView 地图

    系统自带地图  框架: CoreLocation MapKit CLLocationManager --> 定位管理者  CLGeocoder --> 地理编码器 MKMapView -- ...

  8. Graduate Summer School: Deep Learning, Feature Learning

    http://www.ipam.ucla.edu/programs/summer-schools/graduate-summer-school-deep-learning-feature-learni ...

  9. 2815: [ZJOI2012]灾难 - BZOJ

    题目描述 Description 阿米巴是小强的好朋友.    阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的 ...

  10. JUnit4的使用

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写. 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据.元数据 ...