spring 开发提倡接口编程,配合DI技术可以更好的减少层(程序)与层(程序)之间的解耦合

例子说明:
  任务:要求:
        1.打印机依赖纸张和墨盒
        2.纸张有A4和B5两种
        3.墨盒有彩色和黑色2种
        4.使用A4纸张和彩色墨盒打印指定内容
        5.使用B5纸张和黑色墨盒打印指定内容

7.要求使用接口

代码:

package Ink;

public interface Ink {
public String getInk(); }
package Ink;

public class Black_Ink implements  Ink{
public String getInk()
{
return "黑白";
}
}
package Ink;

public class Color_Ink implements Ink{
public String getInk()
{
return "彩色";
}
}

package Paper

package Paper;

public interface Paper {
public String getPaper();
}
package Paper;

public class A4_Paper implements Paper{
public String getPaper()
{
return "A5纸张";
}
}
package Paper;

public class A5_Paper implements  Paper{
public String getPaper()
{
return "A5纸张";
}
}

package Print

package Print;

import Paper.Paper;
import Ink.Ink; public class print {
private Ink ink;
private Paper paper; public void setInk(Ink ink) {
this.ink = ink;
} public void setPaper(Paper paper) {
this.paper = paper;
}
public void print(String context)
{
System.out.print("使用"+ink.getInk()+"在"+paper.getPaper()+"上,打印:"+context);
}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="A4_Paper" class="Paper.A4_Paper"></bean>
<bean id="Color_Ink" class="Ink.Color_Ink"></bean> <bean id="Print" class="Print.print">
<property name="paper">
<ref bean="A4_Paper" />
</property>
<property name="ink">
<ref bean="Color_Ink"/>
</property>
</bean> </beans>

package Test

package Test;

import Print.print;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test {
public static void main(String []args)
{
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
print p=(print)context.getBean("Print");
p.print("你好!");
}
}

通过上面的案例,我们可以体会到DI配合接口编程,确实可以减少层(web层)和业务层的耦合度

如何减少程序间的耦合度?_DI与接口的更多相关文章

  1. contentprovider提供程序间共享数据的统一接口

    contentprovider提供程序间共享数据的统一接口

  2. C# 进程(应用程序)间通信

    SendMessage用法: 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.该函数是应用程序和应用程序之间进行消息传递的主要手段之一. ...

  3. 应用程序间跳转 (友盟SSO 授权 与系统自带的分享)

    应用程序间跳转的应用场景 使用第三方用户登录,如微信登录,返回用户名和密码 需要用户授权,返回到调用程序,同时返回授权的用户名 应用程序推广,跳转到itunes并显示指定app下载页 第三方支付,跳转 ...

  4. iPhone应用程序间传递数据

    前一篇简单的介绍了iPhone应用程序间通信,主要是通过在被调用应用的Info.plist中加入URL方案,在应用中通过openUrl来实现程序的调用.而应用程序间的数据传递则可以更具url来实现,例 ...

  5. C#实现在应用程序间发送消息的方法示例

    本文实例讲述了C#实现在应用程序间发送消息的方法.分享给大家供大家参考,具体如下: 首先建立两个C#应用程序项目. 第一个项目包含一个Windows Form(Form1),在Form1上有一个But ...

  6. 使用openURL实现程序间带参数跳转详解

    使用openURL实现程序间带参数跳转详解 实现的效果:有两款应用A与B,A打开B A --> B 1. 新建工程B,bundle ID为com.YouXianMing.B 建立一个URL 这么 ...

  7. 程序间获取ALV显示数据(读取ALV GRID上的数据)

    程序间获取ALV数据的两种方法: 方法1:通过修改SUBMIT的目标程序,把内表EXPORT到内存,SUBMIT后IMPORT ,该方法需要修改目标程序,可以任意设置目标程序的中断点: * Execu ...

  8. 计算机网络|C语言Socket编程,实现两个程序间的通信

    C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图

  9. 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制

    spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...

随机推荐

  1. javascript插件制作学习-制作步骤

    原生JavaScript插件开发学习 自己制作的demo大家可以看下https://www.cnblogs.com/zimengxiyu/p/9814889.html 插件制作步骤: (一)构造函数 ...

  2. ValidateUtil常用验证工具类,如手机、密码、邮箱等

    package cn.com.ssk.util.utils; import java.util.regex.Pattern; import org.apache.commons.lang3.Strin ...

  3. RocketMQ消息发送流程和高可用设计

    (源码阅读先看主线 再看支线 先点到为止 后面再详细分解) 高可用的设计就是:当producer发送消息到broker上,broker却宕机,那下一次发送如何避免发送到这个broker上,就是采用La ...

  4. Vue可自定义tab组件

    在工作中我们常常要用到tab组件,如果有用第三方组件库的话一般都会有这个组件,但如果没有使用第三方组件库,或者想要自定义tab,那么或许这个无依赖的tab组件将会极大地节约你的开发时间.     如何 ...

  5. legend3---4、lavarel中session使用注意

    legend3---4.lavarel中session使用注意 一.总结 一句话总结: session('key',$value)不是存值,是设置默认值,session(['key'=>$val ...

  6. Servlet基础总结

    1.Servlet概念: Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间 ...

  7. 如何将浏览器上的JS文件屏蔽

    在学习自定验证时,需要在页面上进行调试运行结果,这时的JS会影响运行结果的显示,所以我们会将JS代码屏蔽掉,那么我们该如何做呢? 第一步: 在浏览器地址栏输入about:config  点击“我保证会 ...

  8. IDEA打开最近打开的项目以及关闭项目

    关闭的是当前项目

  9. Dart 基本语法

    ?? // 如果b为null则赋值,否则保持原样 b ??= value; 级联符号.. querySelector('#confirm') // Get an object. ..text = 'C ...

  10. 二十九:数据库之SQLAlchemy连接数据库

    手写SQL复用性不高,SQL越复杂越容易出bug,而且容易引起SQL注入,所以现在Ibanez使用orm框架将数据库映射为数据模型,这是使用SQLAlchemy 准备工作,安装SQLAlchemy和P ...