如何在Java中利用国际奥委会控制反转

  介绍

这篇文章给大家介绍如何在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中利用国际奥委会控制反转