码迷,mamicode.com
首页 > 其他好文 > 详细

面向對象設計原則——依赖倒置原则

时间:2020-09-18 00:22:40      阅读:29      评论:0      收藏:0      [点我收藏+]

标签:故事   书籍   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!