设计模式_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 "林书豪大胜尼克斯";

    }

}

 

你可能感兴趣的:(设计模式)