这篇文章给大家介绍如何在Java中利用国际奥委会控制反转,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
Java的特点有哪些
Java的特点有哪些 1. java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2. java具有简单性,面向对象,分布式、安全性,平台独立与可移植性,动态性等特点。 3.使用Java可以编写桌面应用程序,网络应用程序,分布式系统和嵌入式系统应用程序等。
<强>奥委会范式揭秘强>
控制反转是一种带有某些特征的模式。下面,给出了由马丁给出的一个国际奥委会经典范例,该范例实现的功能是从控制台中收集用户数据。
public static void main (String [], args), { while 才能;(真实),{ ,,,BufferedReader userInputReader =, new BufferedReader ( ,,,,,,,new InputStreamReader(系统)); ,,,System.out.println (“Please  enter some 文本:,“); ,,,try { ,,,,,System.out.println (userInputReader.readLine ()); ,,,},catch (IOException e), { ,,,,,e.printStackTrace (); ,,,} ,,} }
这个用例中,在主要的方法中进行流程控制:在无限循环调用中,读取用户输入,并将读取的内容输出到控制台上。完全又主要方法控制何时去读取用户输入,何时去输出。
考虑下,上述程序的一个新版本,该版本中需要通过图形界面中的文本框来收件用户输入,另外还有个按钮,该按钮上绑定有一个行动监听器。这样的话,用户每次点击按钮,输入的文本由监听器收集并打印到面板。
在这个版本的程序中,它实际上是由事件监听器模型(在这种情况下,这是框架)的控制下,调用开发者编写的用于读取和打印用户输入的代码。简单地说,框架将调用开发人员的代码,而不是其他方式。该框架实际上是一个可扩展的结构,它为开发人员提供了一组注入自定义代码段的切入点。
这种情况下,控制已经被有效的反转了。
从更通用的角度来看,由框架定义的每个可调用扩展点(以接口实现,实现继承(也称为子类)的形式)是国际奥委会的一种明确定义的形式。
看下,下述这个简单的Servlet例子:
public class MyServlet extends HttpServlet { , protected 才能;void  doPost ( ,,,,,HttpServletRequest 请求,,HttpServletResponse 响应) ,,,,,throws ServletException, IOException { ,,,//developer implementation 这里 ,,} , protected 才能;void  doGet ( ,,,,,HttpServletRequest 请求,,HttpServletResponse 响应) ,,,,,throws ServletException, IOException { ,,,//developer implementation 这里 ,,} , }
此处,HttpServlet类(属于框架)是完全控制程序的元素,而不是MyServlet这个子类。在由servlet容器创建之后,当收到servlet的HTTP GET和POST的请求,doGet()和doPost()方法中的代码会分别自动调用。
与典型的继承方式相比,即子类是控制的元素,而不是基类,该例中,控件已经被反转了。
事实上,servlet的方法是模板方法模式的实现,稍后我们再深入讨论。
使用那些通过提供可扩展API,秉承开闭原则的框架时,使用框架的开发人员的角色,最终被归结为定义自己的一组自定义类,即开发人员要么通过实现框架提供的一个或多个接口方式,要么通过继承现有基类的方式,反过来,类的实例却是直接框架进行实例化,并且这些事例是被框架调用的。
此处引用福勒的话:该框架调用开发人员,而不是开发人员调用该框架,因此,国际奥委会通常被称为好莱坞原则:不要打电话给我们,我们会打电话给你。
<强>国际奥委会的实现方式强>
该问题上,显而易见的是,实现控制反转是有几种不同方法的。我们不妨来总结一下,那些常见的实现方式。
注入依赖实现奥委会
如前所述,注入依赖是国际奥委会的一种实现方式,而且是最常见的一种面向对象设计方式。但是,思考一下:注入依赖究竟是如何达到控制反转效果的呢?
为了回答这个问题,我们给出如下一个原始的例子:
public interface UserQueue {, void 才能加入(User 用户),, void 才能删除(User 用户); User 才能得到(); , } , public abstract  class AbstractUserQueue implements  UserQueue { protected 才能;LinkedList< User>, queue =, new LinkedList如何在Java中利用国际奥委会控制反转