欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

该范例实现的功能是 劳务派遣管理系统 从控制台中收集用户数据

点击: 次  来源:宝鼎软件 时间:2017-06-28

原文出处: scilence

对付很多开拓人员来说,节制反演(IoC)都是一个恍惚的观念,因为他们在现实世界中很少或没有被应用过。在最好的环境下,节制反演(IoC)可以加单的认为是等效于依赖注入(DI)。实际上,只有在翻转节制与依赖注入两边都只是反应翻转依赖打点节制的时候,才认为两者是等效的。固然,依赖注入实际上是IoC的一种众所周知的形式。可是,事实上IoC却是一个相对更为遍及的软件设计典型,可以通过多种模式来举办实现。在本文中,我们将先容依赖注入,调查者模式和模板要领模式如何实现节制反转的。

正如很多其他设计模式,是从各类百般的利用场景中总结出来的,IoC的实现方法,也是雷同的一种适合开拓者利用的折中方法:

  • 一方面,高度解耦组件的设计,以及将应用逻辑封装在一个单一的处所,是实现IoC的直接而又自然的一种方法。
  • 另一方面,上述实现需要至少需要构建一个间接层,然而在某些用例中,这大概又是一种太过设计了。
  • 接下来,不妨看几个详细的实现,这将有助于您相识,如安在这些属性之间举办衡量折中。

    IOC范式揭秘

    节制反转是一种带有某些特征的模式。下面,给出了由Martin Fowler给出的一个IOC经规类型,该典型实现的成果是从节制台中收集用户数据。

    public static void main(String[] args) {
        while (true) {
            BufferedReader userInputReader = new BufferedReader(
                    new InputStreamReader(System.in));
            System.out.println("Please enter some text: ");
            try {
                System.out.println(userInputReader.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    这个用例中,在main要领中举办流程节制:在无限轮回挪用中,读取用户输入,并将读取的内容输出到节制台上。完全又main要领节制何时去读取用户输入,何时去输出。

    思量下,上述措施的一个新版本,该版本中需要通过图形界面中的文本框来收件用户输入,别的尚有个按钮,该按钮上绑定有一个action监听器。这样的话,用户每次点击按钮,输入的文本由监听器收集并打印到面板。

    在这个版本的措施中,它实际上是由事件监听器模子(在这种环境下,这是框架)的节制下,挪用开拓者编写的用于读取和打印用户输入的代码。简朴地说,框架将挪用开拓人员的代码,而不是其他方法。该框架实际上是一个可扩展的布局,它为开拓人员提供了一组注入自界说代码段的切入点。

    这种环境下,节制已经被有效的反转了。

    从更通用的角度来看,由框架界说的每个可挪用扩展点(以接话柄现,实现担任(也称为子类)的形式)是IoC的一种明晰界说的形式。

    看下,下述这个简朴的Servlet例子:

    public class MyServlet extends HttpServlet {
    
        protected void doPost(
                HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // developer implementation here
        }
    
        protected void doGet(
                HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // developer implementation here
        }
    
    }

    此处,HttpServlet类(属于框架)是完全节制措施的元素,而不是MyServlet这个子类。在由servlet容器建设之后,当收到servlet的GET和POST的HTTP请求,doGet()和doPost()要领中的代码会别离自动挪用。

    与典范的担任方法对比,即子类是节制的元素,而不是基类,该例中,控件已经被反转了。

    事实上,servlet的要领是模板要领模式的实现,稍后我们再深入接头。

    利用那些通过提供可扩展API,承袭开闭原则的框架时,利用框架的开拓人员的脚色,最终被归结为界说本身的一组自界说类,即开拓人员要么通过实现框架提供的一个或多个接口方法,要么通过担任现有基类的方法。反过来,类的实例却是直接框架举办实例化,而且这些事例是被框架挪用的。

    此处引用Fowler的话:

    该框架挪用开拓人员,而不是开拓人员挪用该框架。

    因此,IoC凡是被称为好莱坞原则:

    不要打电话给我们,我们会打电话给你。

    IOC的实现方法

    该问题上,显而易见的是,实现节制反转是有几种差异要领的。我们不妨来总结一下,那些常见的实现方法。

    注入依赖实现IOC

    如前所述,注入依赖是IOC的一种实现方法,并且是最常见的一种面向工具设计方法。可是,思考一下:注入依赖毕竟是如何到达节制反转结果的呢?