zoukankan      html  css  js  c++  java
  • 设计模式_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 "林书豪大胜尼克斯";
        }
    }
  • 相关阅读:
    释放jQuery 的$ 的使用权
    jQuery 入口函数主要有4种写法
    jQuery的 ready() 和原生 Js onload() 的主要区别:
    简单的单击图片循环播放
    Jsの练习-数组其他常用方法 -map() ,filter() ,every() ,some()
    Jsの练习-数组常用方法 -forEach()
    stylelint和eslint的VS插件配置
    工作中遇到的bug
    VUE关于data对象中数组修改和对象添加属性的响应式问题
    VUE的watch监听对象
  • 原文地址:https://www.cnblogs.com/zjsy/p/4452617.html
Copyright © 2011-2022 走看看