spring特性1-依赖注入

本文通过示例代码详细解释了Java中的耦合性概念及其带来的问题,并展示了如何利用接口和构造注入来降低耦合度,提高代码的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.耦合性

java是面向对象编程的,我们可以理解java中一个类就是一个相对独立的功能模块。这样就可以达到类的复用。既然是复用,那么类与类之间肯定是有相互依赖的。这种依赖关系就是耦合性。
我们编程的一个指导原则就是高内聚低耦合。
为什么要低耦合呢?
1.高耦合的代码将很难扩展,如果相互依赖太紧密,就会出现改一个bug而影响其他类,从而产生新的bug。
2.如果完全没有耦合了,那么每个类都能独立完成自己的功能,这样的代码将无法复用。

2.高耦合代码示例

package com.amber.ivy.spring;
/**
 * 高耦合代码示例
 * @author ivyamber
 *
 */
public class Coupling {


public static void main(String[] args) {
CouplingMp3 mp3 = new CouplingMp3();
mp3.play();
}


}
/**
 * 古典音乐家类
 * @author ivyamber
 *
 */
class ClassicMusicSinger
{
public void sing()
{
System.out.println("我是古典音乐家,我唱古典音乐");
}
}
/**
 * 流行音乐家类
 * @author ivyamber
 *
 */
class PopMusicSinger
{
public void sing()
{
System.out.println("我是流行歌手,我唱流行音乐");
}
}
/**
 * 高度耦合的mp3播放器
 * @author ivyamber
 *
 */
class CouplingMp3
{
private PopMusicSinger singer;
public CouplingMp3()
{
singer = new PopMusicSinger();
}
public void play()
{
singer.sing();
}
}
以上代码mp3每次只能播放流行音乐,这肯定不是我们想要的结果。

3.使用接口和构造注入实现低耦合

package com.amber.ivy.spring;
/**
 * 低耦合代码示例
 * @author ivyamber
 *
 */
public class NoneCoupling {


public static void main(String[] args) {
//演唱流行乐
NoneCouplingMp3 mp3 = new NoneCouplingMp3(new NonePopMusicSinger());
mp3.play();
//演唱古典音乐
mp3 = new NoneCouplingMp3(new NoneClassicMusicSinger());
mp3.play();
}


}
/**
 * 音乐家类,所有类型的音乐家都要实现这个类
 * @author ivyamber
 *
 */
interface Singer
{
void sing();
}


/**
 * 古典音乐家类
 * @author ivyamber
 *
 */
class NoneClassicMusicSinger implements Singer
{
public void sing()
{
System.out.println("我是古典音乐家,我唱古典音乐");
}
}
/**
 * 流行音乐家类
 * @author ivyamber
 *
 */
class NonePopMusicSinger implements Singer
{
public void sing()
{
System.out.println("我是流行歌手,我唱流行音乐");
}
}
/**
 * 高度耦合的mp3播放器
 * @author ivyamber
 *
 */
class NoneCouplingMp3
{
private Singer singer;//使用接口而不是用具体的实现
public NoneCouplingMp3(Singer singer)
{
this.singer = singer;
}
public void play()
{
singer.sing();
}
}

spring依赖注入做的更好,下面我将用spring来演示依赖注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值