本文最后更新于:2021年12月13日 下午
依赖倒置原则
1、定义(Dependence Inversion Principle,DIP)
高层模块不应该依赖低层模块,应该依赖其抽象,抽象不应该依赖其细节,细节应该依赖其抽象
1 2 3 4
| 低层模块:java类 高层模块:各个java类组合而成,像service实现类 抽象:接口或抽象类 细节:接口或抽象类实现
|
2、优点
- 降低类间的耦合性;
- 提高系统的稳定性;
- 减少并行开发引起的风险;
- 提高代码的可读性和可维护性。
3、示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package cc.niushuai.study.designpattern.sixprinciples.dip;
import lombok.AllArgsConstructor; import lombok.Data;
class AShop {} class BShop {}
@Data @AllArgsConstructor class Customer { private String name; public void shopping(AShop shop) { System.out.println(this.getName() + " 在 aShop shopping ..."); }
public void shopping(BShop shop) { System.out.println(this.getName() + " 在 bShop shopping ..."); } }
public class Main { public static void main(String[] args) {
Customer customer = new Customer("张三");
customer.shopping(new AShop()); customer.shopping(new BShop()); } }
|
运行结果:
1 2
| 张三 在 aShop shopping ... 张三 在 bShop shopping ...
|
每个商店都是单独的一个实体类, 能不能抽象出Shop
存在一个name
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| package cc.niushuai.study.designpattern.sixprinciples.dip.main1;
import lombok.AllArgsConstructor; import lombok.Data;
interface Shop { String name(); String sales(); }
class AShop implements Shop{
@Override public String name() { return "AShop"; }
@Override public String sales() { return "铅笔"; } }
class BShop implements Shop{
@Override public String name() { return "BShop"; }
@Override public String sales() { return "橡皮"; } }
@Data @AllArgsConstructor class Customer { private String name;
public void shopping(Shop shop) { System.out.println(this.getName() + " 在 " + shop.name() + " shopping ... 买" + shop.sales()); } }
public class Main1 { public static void main(String[] args) {
Customer customer = new Customer("张三");
customer.shopping(new AShop()); customer.shopping(new BShop()); } }
|
运行结果:
1 2
| 张三 在 AShop shopping ... 买铅笔 张三 在 BShop shopping ... 买橡皮
|
这样无论存在多少商店,只需要扩展商店的子类即可