亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

依賴和耦合

habren / 1859人閱讀

摘要:什么是依賴,什么是耦合現(xiàn)在來聊一聊我對于依賴和耦合的理解。現(xiàn)在又有一個需求小明想要去吃香蕉,想要去吃梨子。再加一個這個需求是一個合理的需求,但是因為我們這一段的代碼是不合理的,產(chǎn)生了依賴和耦合。

我剛開始學(xué)習(xí)軟件工程,學(xué)習(xí)設(shè)計模式,總是會聊到設(shè)計模式,總是會說高內(nèi)聚,低耦合,還有依賴注入。什么是依賴,什么是耦合?現(xiàn)在來聊一聊我對于依賴和耦合的理解。

先看下面一段簡單代碼,

class Apple{
    private String name = "Apple";
}

class People{
    private List stomach = new ArrayList<>();
    
    public void eat(Apple apple){
        stomach.add(apple);
    }

}

class MainDemo {
    public static void main(String[] args) {    
        People xiaoming= new People();
        Apple apple = new Apple();
        xiaoming.eat(apple);
    }
}

一個人類,一個蘋果類,代碼的意思是小明吃蘋果,保存在胃中。
現(xiàn)在又有一個需求:小明想要去吃香蕉,想要去吃梨子。用上面這一段的代碼就不好改了。要完成需求就需要做大量的變化。再加一個 Banana stomach?
這個需求是一個合理的需求,但是因為我們這一段的代碼是不合理的,產(chǎn)生了依賴和耦合。

如何減少依賴,就是使用面向接口的編程。依賴一個抽象而不是依賴一個實現(xiàn)。

interface Food{
    
}

class Banana implement Food{
    private String name = "Banana";
}

class Apple implement Food{
    private String name = "Apple";
}

class People{
    private List stomach = new ArrayList<>();
    
    public void eat(Food food){
        stomach.add(food);
    }
}

class MainDemo {
    public static void main(String[] args) {
        People xiaoming= new People();
        Food apple = new Apple();
        xiaoming.eat(apple);
        Food banana = new Banana();
        xiaoming.eat(banana);
    }
}

這樣其實我的接口里面啥也沒有,但是卻將依賴轉(zhuǎn)移到了抽象的接口。這樣我每次添加都可以增加不同水果。其實我這個取名是Food,那么這個其實可以添加其他的種類食物。這也體現(xiàn)了開放-閉合原則。再看最后一個例子

import java.util.*;


interface Food{
    public String getName();    
}

abstract class Fruit implements Food {
    protected String type = "fruit";
    
    public abstract void fruitProperty();
}

class Banana extends Fruit {
    private String name = "Banana";
    
    public String getName(){
        return name;
    }
    
    public void fruitProperty(){}
}

class Apple extends Fruit {
    private String name = "Apple";
    
    public String getName(){
        return name;
    }
 
    public void fruitProperty(){}
    
}

abstract class Meat implements Food {
    protected String type = "meat";
            
    public abstract void meatProperty();
}

class Beef extends Meat {
    private String name = "Beef";
    
    public String getName(){
        return name;
    }
    
    public void meatProperty(){}
}

class Chicken extends Meat {
    private String name = "Chicken";
    
    public String getName(){
        return name;
    };
    
    public void meatProperty(){}
}

class People{
    private List stomach = new ArrayList<>();
    
    public void eat(Food food){
        stomach.add(food);
    }
    
    public void display(){
        for (Food f : stomach) {
            System.out.println("stomach have " + f.getName());
        }
    }
}


class MainDemo {
    public static void main(String[] args) 
    {
        People xiaoming= new People();
        Food apple = new Apple();
        xiaoming.eat(apple);
        Food banana = new Banana();
        xiaoming.eat(banana);
        Food beef = new Beef ();
        xiaoming.eat(beef);
        Food chicken = new Chicken ();
        xiaoming.eat(chicken);
        xiaoming.display();
    }
}

可以添加任何食物,西瓜,白菜,西蘭花。并且他們之間的方法可以是共有的,也可以私有的。當(dāng)出現(xiàn)幾種大類相同的事務(wù),添加一個蔬菜抽象類,這樣簡化代碼。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/75022.html

相關(guān)文章

  • 可靠React組件設(shè)計的7個準(zhǔn)則之封裝

    摘要:組件可以處理其他組件的實例化為了避免破壞封裝,請注意通過傳遞的內(nèi)容。因此,將狀態(tài)管理的父組件實例傳遞給子組件會破壞封裝。讓我們改進兩個組件的結(jié)構(gòu)和屬性,以便恢復(fù)封裝。組件的可重用性和可測試性顯著增加。 翻譯:劉小夕原文鏈接:https://dmitripavlutin.com/7-... 原文的篇幅非常長,不過內(nèi)容太過于吸引我,還是忍不住要翻譯出來。此篇文章對編寫可重用和可維護的Re...

    yck 評論0 收藏0
  • 設(shè)計模式六大原則(PHP)

    摘要:常用的六大設(shè)計模式有單一職責(zé)原則,里氏替換原則,依賴倒轉(zhuǎn)原則,接口隔離原則,迪米特法則,開閉原則。這六大原則是最虛,最抽象的,很難理解。這就是接口隔離原則。當(dāng)我們遵循前面介紹的五大原則,以及使用種設(shè)計模式的目的就是遵循開閉原則。   設(shè)計模式的目的是為了更好的代碼重用性,可讀性,可靠性和可維護性。常用的六大設(shè)計模式有:單一職責(zé)原則(SRP),里氏替換原則(LSP),依賴倒轉(zhuǎn)原則(DIP...

    bluesky 評論0 收藏0
  • 深入理解JavaScript系列10:S.O.L.I.D五大原則之依賴倒置原則

    摘要:前言本章我們要講解的是五大原則語言實現(xiàn)的第篇,依賴倒置原則。當(dāng)應(yīng)用依賴倒置原則的時候,關(guān)系就反過來了。在當(dāng)靜態(tài)類型語言的上下文里討論依賴倒置原則的時候,耦合的概念包括語義和物理兩種。依賴倒置原則和依賴注入都是關(guān)注依賴,并且都是用于反轉(zhuǎn)。 前言 本章我們要講解的是S.O.L.I.D五大原則JavaScript語言實現(xiàn)的第5篇,依賴倒置原則LSP(The Dependency Invers...

    chenjiang3 評論0 收藏0
  • 第6章:可維護性軟件構(gòu)建方法 6.1可維護性的度量構(gòu)造原則

    摘要:設(shè)計方案的容易改變這就是所謂的軟件構(gòu)建的可維護性,可擴展性和靈活性。這也可能表明類型或方法可能難以維護?;谠创a中不同運算符和操作數(shù)的數(shù)量的合成度量。對修改的封閉這種模塊的源代碼是不可侵犯的。 大綱 軟件維護和演變可維護性度量模塊化設(shè)計和模塊化原則OO設(shè)計原則:SOLIDOO設(shè)計原則:GRASP總結(jié) 軟件維護和演變 什么是軟件維護? 軟件工程中的軟件維護是交付后修改軟件產(chǎn)品以糾正故障...

    chanjarster 評論0 收藏0
  • Spring還可以這么學(xué)--IoC(控制反轉(zhuǎn)) / DI(依賴注入)理解

    摘要:對象之間耦合度過高的系統(tǒng),必然會出現(xiàn)牽一發(fā)而動全身的情形??刂票环崔D(zhuǎn)之后,獲得依賴對象的過程由自身管理變?yōu)榱擞扇萜髦鲃幼⑷?。于是,他給控制反轉(zhuǎn)取了一個更合適的名字叫做依賴注入。 Spring還可以這么學(xué)--IoC(控制反轉(zhuǎn)) / DI(依賴注入)理解 聲明:文章的前三部分參考博文:https://www.cnblogs.com/Nouno...這篇文章首發(fā)是在我的個人微信訂閱號每天學(xué)編...

    atinosun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<