标签:故事 书籍 hat 接口 开发 class 替换 nbsp ip)
依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,DIP)
原始定义:
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)
软件设计中,细节具有多变性,而抽象层则相对稳定
作用:
降低类间的耦合性
提高系统的稳定性。
减少并行开发引起的风险。
提高代码的可读性和可维护性。
实现方法
目的是通过要面向接口的编程来降低类间的耦合性
每个类尽量提供接口或抽象类,或者两者都具备。
变量的声明类型尽量是接口或者是抽象类。
任何类都不应该从具体类派生。
使用继承时尽量遵循里氏替换原则。
例子:
场景:mother给孩子讲故事,
/** * 从书籍中获取故事给baby */ public class Book { public String getContent(){ return "something interesting"; } }
public class Mother { /** * 给mother一本书,就可以讲故事了 * @param book */ public void tallstory(Book book){ System.out.println("begin tall story"); System.out.println(book.getContent()); } }
/** * baby听故事 */ public class BabyTest { public static void main(String[] args) { Mother mother = new Mother(); mother.tallstory(new Book()); } }
如果我们现在要mother通过新闻来讲故事,
/** * 如果给妈妈一个新闻,就不会讲了 * 因为Mother和book之间是强耦合 */ public class NewsPaper { public String getContent(){ return "something newspaper"; } }
解决方法:
/** * 我们可以在mother和book直接引入一个抽象接口 * mother以接口为参数 * book是实现接口的类 */ public interface ReaderWhat { public String getContent(); }
获取故事的途径进行继承接口:
public class Book implements ReaderWhat { public String getContent(){ return "something interesting"; } }
public class NewsPaper implements ReaderWhat{ public String getContent(){ return "something newspaper"; } }
mother根据接口读
public class Mother { public void tallstory(ReaderWhat readerWhat){ System.out.println("begin tall story"); System.out.println(readerWhat.getContent()); } }
/** * baby听故事 */ public class BabyTest { public static void main(String[] args) { Mother mother = new Mother(); mother.tallstory(new Book()); mother.tallstory(new NewsPaper()); } /** * re: * begin tall story * something interesting * begin tall story * something newspaper */ }
标签:故事 书籍 hat 接口 开发 class 替换 nbsp ip)
原文地址:https://www.cnblogs.com/java-quan/p/13664075.html