设计模式_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 "林书豪大胜尼克斯";
    }
}
原文地址:https://www.cnblogs.com/zjsy/p/4452617.html