设计模式_03_依赖倒置原则:面向接口编程
设计模式_03_依赖倒置原则:面向接口编程
问题:
package designPatternOf_03; /** * 依赖倒置原则:面向接口编程 * 妈妈讲故事: * 问题:如果给妈妈一份报子,就不会读了 */ public class DependencyInversionPrinciple_01 { public static void main(String[] args) { Mother mom=new Mother(); Book_01 book=new Book_01(); mom.talk(book); } } class Book_01{ public String getContent(){ return "很久很久以前,有个阿拉伯故事..."; } } class Mother{ public void talk(Book_01 book){ System.out.println("妈妈开始讲故事:"); System.out.println(book.getContent()); } }
解决:
package designPatternOf_03; /** * 依赖倒置原则:面向接口编程 * 妈妈讲故事: * 问题:如果给妈妈一份报子,就不会读了 * 解决:引入一个接口:IReader(读物:只要是带字的都可以读):Moter类与Book类没有依赖,依赖传递给了IReader * 传递依赖关系有三种: * 1、方法接口传递,2、构造方法传递,3、setter方法传递 * Spring的依赖传递运用很多 * 实际编程中: * 1、底层模块尽量都要有抽象类或接口 * 2、变量声明类型尽量是抽象类或接口 * 3、使用继承时遵循里氏替换 */ public class DependencyInversionPrinciple_02 { public static void main(String[] args) { Mother_02 mom=new Mother_02(); //给一本书,就读书 Book_02 book=new Book_02(); mom.talk(book); //给报子,就读报子 NewsPaper_02 np=new NewsPaper_02(); mom.talk(np); } } /** * 母亲 */ class Mother_02{ public void talk(IReader reader){ System.out.println("妈妈开始讲故事:"); System.out.println(reader.getContent()); } } /** * 读物 */ interface IReader{ public String getContent(); } /** * 书 */ class Book_02 implements IReader{ public String getContent(){ return "很久很久以前,有个阿拉伯故事..."; } } /** * 报子 */ class NewsPaper_02 implements IReader{ public String getContent(){ return "林书豪大胜尼克斯"; } }