java設計模式理解依賴于抽象不依賴具體的分析
在面向對象設計原則中,要求"要依賴于抽象,不要依賴于具體", 這句話有很多人搞不懂。在這里談談我自己的理解。首先看看以下代碼
class A{ public void swim(){ Dog dog = new Dog(); dog.move(); } }
swim方法中定義了一個Dog的對象,那么無論哪個對象調用這個方法時,一定是"狗爬",swim和Dog的對象是緊耦合的關系,我們想換成鴨子是不可能。
假如代碼這樣換一下,我們定義一個動物的接口,接口定義一個move方法。
interface Animal { void move(); }
讓狗和鴨子實現該接口,代碼如下
public class Dog implements Animal { override public void move(){ //狗爬 } } public class Duck implements Animal { override public void move(){ //八字步 } }
class A代碼改成如下代碼:
class A { private Animal animal; public A(Animal animal) { this.animal = animal; } public void swim(){ animal.move(); } }
class A依賴于接口(抽象)Animal,和狗、鴨子(具體)沒有一點關系,當我們注入的對象是狗,則執(zhí)行狗爬,當我們注入的對象是鴨子,則執(zhí)行的是八字步。這就是“要依賴于抽象,不要依賴于具體”具體含義。這樣的好處是程序很好擴展,如果想使用青蛙游泳時,我只需要創(chuàng)建一個實現Animal接口的青蛙類,將青蛙的對象注入A類中,便可以執(zhí)行青蛙的蛙泳了,A中的代碼完全閉合。
以上就是java設計模式理解依賴于抽象不依賴具體分析的詳細內容,更多關于java依賴抽象設計模式的資料請關注腳本之家其它相關文章!
相關文章
Java中的NoClassDefFoundError報錯含義解析
這篇文章主要為大家介紹了Java中的NoClassDefFoundError含義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-11-11Springboot中@Value注解的場景用法及可能遇到的問題詳解
這篇文章主要給大家介紹了關于Springboot中@Value注解的場景用法及可能遇到問題的相關資料, @Value通常用于注入外部化屬性,即外部配置屬性的注入,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11springboot下mybatis-plus如何打印sql日志和參數到日志文件
本文主要介紹了springboot下mybatis-plus如何打印sql日志和參數到日志文件,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03java:程序包javax.servlet.http不存在問題解決
這篇文章主要給大家介紹了關于java:程序包javax.servlet.http不存在問題解決的相關資料,如果引用的包依賴的庫文件缺失或版本不匹配,就會導致"Java 程序包不存在"的錯誤,需要的朋友可以參考下2023-10-10