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. Jmeter(五)关联之正则表达式提取器

    我们在用Jmeter做接口或者性能测试时,经常会碰到第二个请求提交的的参数要从第一个请求返回的参数中获取,而这些参数值并不是固定的,是动态变化的,这种场景就要用到关联 Jmeter提供了一种叫做正则提 ...

  2. [python 笔记] __iter__迭代器

    可迭代对象和迭代器 https://blog.csdn.net/nightcharm/article/details/78964676 可迭代对象 对象里面含有__iter__()方法的实现,对象的_ ...

  3. python学习之路(10)--难点

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以 ...

  4. vue下实现input实现图片上传,压缩,拼接以及旋转

    背景 作为一名前端工作人员,相信大家在开发系统的时候,经常有遇到需要这么一种需求,就是需要为用户保存上传的图片,很多小白遇到这个问题的时候,都会虎躯一震,以为会是一个棘手的问题,当你读完这篇文章的时候 ...

  5. SpringBoot启动时的Banner设置

    Spring Boot程序启动的时候输出的由字符组成的Spring符号并不陌生.这个是Spring Boot为自己设计的Banner: 1. 第一种方式:修改的时候,进行设置,在Application ...

  6. idea maven sync Cannot resolve xxx 的解决方案

    经常会出现这种奇葩情况,提示找不到包 其实是因为网络波动或者突然断掉,导致包更新出现问题 直接去maven的仓库目录 找到不能找到的包 删掉相关目录 然后重新更新maven就行了 比如 直接去仓库目录 ...

  7. 一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别

     Arraylist 与 LinkedList 区别  结构上的区别 ArrayList底层实现基于动态数组,LinkedList底层实现基于双向链表.  性能上区别 ArrayList查询快,增删慢 ...

  8. JAVA TCP Socket

    服务器端   package com.Pong.tcpip; import java.io.BufferedReader; import java.io.IOException; import jav ...

  9. day8_文件操作及编码解码

    一.文件操作基本流程 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所 ...

  10. 下载的管理类MyDownloadManager

    import android.content.Intent; import android.net.Uri; import java.io.File; import java.io.FileOutpu ...