欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java設(shè)計(jì)模式理解依賴(lài)于抽象不依賴(lài)具體的分析

 更新時(shí)間:2021年10月13日 11:56:21   作者:guoyp2126  
這篇文章主要為大家介紹了java設(shè)計(jì)模式的規(guī)則,理解依賴(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報(bào)錯(cuò)含義解析

    這篇文章主要為大家介紹了Java中的NoClassDefFoundError含義詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-11-11
  • Java拆分List的三種方式總結(jié)

    Java拆分List的三種方式總結(jié)

    開(kāi)發(fā)中我們可能會(huì)遇到一個(gè)大的集合,然后我們需要對(duì)集合進(jìn)行拆分,在這篇文章中,主要介紹了Java拆分List的三種方式,需要的可以參考下
    2023-05-05
  • Java使用Gateway自定義負(fù)載均衡過(guò)濾器

    Java使用Gateway自定義負(fù)載均衡過(guò)濾器

    這篇文章主要介紹了Java使用Gateway自定義負(fù)載均衡過(guò)濾器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 關(guān)于Java中的klass和class

    關(guān)于Java中的klass和class

    這篇文章主要介紹了關(guān)于Java中klass和class的區(qū)別,vm加載的字節(jié)碼,也就是.class文件,被加載到方法區(qū)里面,叫Kclass,是一個(gè)C++對(duì)象,含有類(lèi)的信息、虛方法表等,需要的朋友可以參考下
    2023-08-08
  • Springboot中@Value注解的場(chǎng)景用法及可能遇到的問(wèn)題詳解

    Springboot中@Value注解的場(chǎng)景用法及可能遇到的問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Springboot中@Value注解的場(chǎng)景用法及可能遇到問(wèn)題的相關(guān)資料, @Value通常用于注入外部化屬性,即外部配置屬性的注入,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • springboot整合JSR303校驗(yàn)功能實(shí)現(xiàn)代碼

    springboot整合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-01
  • springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件

    springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件

    本文主要介紹了springboot下mybatis-plus如何打印sql日志和參數(shù)到日志文件,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Springboot的maven間接依賴(lài)的實(shí)現(xiàn)

    Springboot的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-05
  • Java原子操作CAS原理解析

    Java原子操作CAS原理解析

    這篇文章主要介紹了Java原子操作CAS原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • java:程序包javax.servlet.http不存在問(wèn)題解決

    java:程序包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

最新評(píng)論