设计模式 之 依赖倒转原则(DIP) 详解(面向接口编程)

依赖倒转原则(DIP) 详解

核心:
1)高层模块不应该依赖底层模块,二者都应该依赖其抽象
2)抽象不应该依赖细节,细节应该依赖抽象
3)依赖倒转的中心思想是面向接口编程
4)设计理念:相较于细节的多边性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在java中,抽象值得是接口或抽象类,细节就是具体得实现类。
5)使用接口或抽象类的的目的是制定好规范,而步涉及任何具体得操作,把展现细节得任务交给它们得实现类去完成。
注意事项:
1)底层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好。
2)变量的声明类尽量使抽象类或接口,这样我们的变量引用和实际对象间,就有一个缓冲层,利于程序扩展和优化
3)继承时遵顼里氏替换原则。

案例举例:

一个非常简单得例子:
我们实现一个生产者类(Producer)生产电视机(TV)的功能:

class TV{
	public void producing() {
		System.out.println("开始生产电视机");
	}
}
class Producer{
	public void produce(TV tv) {
		tv.producing();
	}
}

在main方法中进行测试:

public static void main(String[] args) {
		TV tv=new TV();
		Producer p=new Producer();
		p.produc(tv);
	}

成功实现。
但是细观代码我们肯定会发现这样写代码会有问题。
比如:如果我们生产的东西不仅仅是电视机(TV)类,还要生产别的商品类,比如电脑,冰箱,则新增了这些类,我们的Producer中也要增加相应的生产方法。
(即Producer与TV类是紧耦合,这在做业务时是完全不提倡的,要求低耦合,高内聚
解决方式:
TV,Computer,firdge都属于生产者可生产的物品,我们可引入以接口ProduceProduct,表示生产物品,使Producer类与接口ProduceProduct产生依赖。
代码即:
构建ProduceProduct接口并添加生产方法:

interface ProduceProduct{
	void producing();
}

使TV类实现ProduceProduct接口并重写生产方法

class TV implements ProduceProduct{
	public void producing() {
		System.out.println("开始生产电视机");
	}
}

更改Producer类使其耦合于接口

class Producer{
	public void produc(ProduceProduct p) {
		p.producing();
	}
}

此时我们再增加产品类电脑

class Computer implements ProduceProduct{
	@Override
	public void producing() {
		System.out.println("开始生产电脑");
	}
}

在main方法中测试:

public static void main(String[] args) {
		TV tv=new TV();
		Producer p=new Producer();
		p.produc(tv);
		
		Computer com=new Computer();
		p.produc(com);
	}

此时的代码结构便于功能的扩展,即符合我们的依赖倒转原则。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值