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