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