成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

依賴和耦合

habren / 1805人閱讀

摘要:什么是依賴,什么是耦合現(xiàn)在來(lái)聊一聊我對(duì)于依賴和耦合的理解?,F(xiàn)在又有一個(gè)需求小明想要去吃香蕉,想要去吃梨子。再加一個(gè)這個(gè)需求是一個(gè)合理的需求,但是因?yàn)槲覀冞@一段的代碼是不合理的,產(chǎn)生了依賴和耦合。

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

先看下面一段簡(jiǎ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);
    }
}

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

如何減少依賴,就是使用面向接口的編程。依賴一個(gè)抽象而不是依賴一個(gè)實(shí)現(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);
    }
}

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

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ù),添加一個(gè)蔬菜抽象類,這樣簡(jiǎn)化代碼。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75022.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    atinosun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<