国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

依賴和耦合

habren / 1804人閱讀

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

我剛開始學習軟件工程,學習設計模式,總是會聊到設計模式,總是會說高內聚,低耦合,還有依賴注入。什么是依賴,什么是耦合?現在來聊一聊我對于依賴和耦合的理解。

先看下面一段簡單代碼,

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);
    }
}

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

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

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);
    }
}

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

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();
    }
}

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/75022.html

相關文章

  • 可靠React組件設計的7個準則之封裝

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

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

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

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

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

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

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

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

    摘要:對象之間耦合度過高的系統,必然會出現牽一發而動全身的情形。控制被反轉之后,獲得依賴對象的過程由自身管理變為了由容器主動注入。于是,他給控制反轉取了一個更合適的名字叫做依賴注入。 Spring還可以這么學--IoC(控制反轉) / DI(依賴注入)理解 聲明:文章的前三部分參考博文:https://www.cnblogs.com/Nouno...這篇文章首發是在我的個人微信訂閱號每天學編...

    atinosun 評論0 收藏0

發表評論

0條評論

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