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

資訊專欄INFORMATION COLUMN

(CZ深入淺出Java基礎(chǔ))設(shè)計(jì)模式筆記

李昌杰 / 1648人閱讀

摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。

這是劉意老師的JAVA基礎(chǔ)教程的筆記
講的賊好,附上傳送門

傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ)

一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則

其實(shí)就是開發(fā)人員經(jīng)常說的”高內(nèi)聚,低耦合”,也就是說,每個(gè)類應(yīng)該只有一個(gè)職責(zé),對(duì)外只能提供一種功能,而引起類變化的原因應(yīng)該只有一個(gè)。在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。

2.開閉原則

核心思想是:一個(gè)對(duì)象對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。
其實(shí)開閉原則的意思就是:對(duì)類的改動(dòng)是通過增加代碼進(jìn)行的,而不是修改現(xiàn)有代碼。
也就是說軟件開發(fā)人員一旦寫出了可以運(yùn)行的代碼,就不應(yīng)該去改動(dòng)它,而是要保證它能一直運(yùn)行下去,如何能夠做到這一點(diǎn)呢?這就需要借助于抽象和多態(tài),即把可能變化的內(nèi)容抽象出來,從而使抽象的部分是相對(duì)穩(wěn)定的,而具體的實(shí)現(xiàn)則是可以改變和擴(kuò)展的。

3.里氏替換原則

核心思想:在任何父類出現(xiàn)的地方都可以用它的子類來替代。
其實(shí)就是說:同一個(gè)繼承體系中的對(duì)象應(yīng)該有共同的行為特征。

4.依賴注入原則

核心思想:要依賴于抽象,不要依賴于具體實(shí)現(xiàn)。
其實(shí)就是說:在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。為了實(shí)現(xiàn)這一原則,就要求我們?cè)诰幊痰臅r(shí)候針對(duì)抽象類或者接口編程,而不是針對(duì)具體實(shí)現(xiàn)編程。

5.接口分離原則

核心思想:不應(yīng)該強(qiáng)迫程序依賴它們不需要使用的方法。
其實(shí)就是說:一個(gè)接口不需要提供太多的行為,一個(gè)接口應(yīng)該只提供一種對(duì)外的功能,不應(yīng)該把所有的操作都封裝到一個(gè)接口中。

6.迪米特原則
核心思想:一個(gè)對(duì)象應(yīng)當(dāng)對(duì)其他對(duì)象盡可能少的了解
其實(shí)就是說:降低各個(gè)對(duì)象之間的耦合,提高系統(tǒng)的可維護(hù)性。在模塊之間應(yīng)該只通過接口編程,而不理會(huì)模塊的內(nèi)部工作原理,它可以使各個(gè)模塊耦合度降到最低,促進(jìn)軟件的復(fù)用

二、設(shè)計(jì)模式 1.概述

1.1.概念
設(shè)計(jì)模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
設(shè)計(jì)模式不是一種方法和技術(shù),而是一種思想
設(shè)計(jì)模式和具體的語(yǔ)言無關(guān),學(xué)習(xí)設(shè)計(jì)模式就是要建立面向?qū)ο蟮乃枷耄M可能的面向接口編程,低耦合,高內(nèi)聚,使設(shè)計(jì)的程序可復(fù)用
學(xué)習(xí)設(shè)計(jì)模式能夠促進(jìn)對(duì)面向?qū)ο笏枷氲睦斫猓粗嗳?。它們相輔相成

1.2.要素
名字 必須有一個(gè)簡(jiǎn)單,有意義的名字
問題 描述在何時(shí)使用模式
解決方案 描述設(shè)計(jì)的組成部分以及如何解決問題
效果 描述模式的效果以及優(yōu)缺點(diǎn)

1.3.分類
創(chuàng)建型模式 對(duì)象的創(chuàng)建:簡(jiǎn)單工廠模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式,單例模式。(6個(gè))

結(jié)構(gòu)型模式 對(duì)象的組成(結(jié)構(gòu)):外觀模式、適配器模式、代理模式、裝飾模式、橋接模式、組合模式、享元模式。(7個(gè))

行為型模式 對(duì)象的行為:模版方法模式、觀察者模式、狀態(tài)模式、職責(zé)鏈模式、命令模式、訪問者模式、策略模式、備忘錄模式、迭代器模式、解釋器模式。(10個(gè))

2.創(chuàng)建型模式具體使用

2.1.簡(jiǎn)單工廠模式
又叫靜態(tài)工廠方法模式,它定義一個(gè)具體的工廠類負(fù)責(zé)創(chuàng)建一些類的實(shí)例
優(yōu)點(diǎn)
客戶端不需要在負(fù)責(zé)對(duì)象的創(chuàng)建,從而明確了各個(gè)類的職責(zé)
缺點(diǎn)
這個(gè)靜態(tài)工廠類負(fù)責(zé)所有對(duì)象的創(chuàng)建,如果有新的對(duì)象增加,或者某些對(duì)象的創(chuàng)建方式不同,就需要不斷的修改工廠類,不利于后期的維護(hù)

public class Demo {
    public static void main(String[] args) {

    }

}

class AnimalFactory {
    private AnimalFactory() {
    }

    static Animal creatAnimal(String type) {
        if ("dog".equals(type)) {
            return new Dog();
        }
        if ("cat".equals(type))
            return new Cat();
        return null;
    }
}

abstract class Animal {
    abstract void eat();
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("dog eats meat");
    }
}

class Cat extends Animal {
    @Override
    void eat() {
        System.out.println("cat eats fish");
    }
}

2.2.工廠方法模式
工廠方法模式中抽象工廠類負(fù)責(zé)定義創(chuàng)建對(duì)象的接口,具體對(duì)象的創(chuàng)建工作由繼承抽象工廠的具體類實(shí)現(xiàn)。
優(yōu)點(diǎn)
客戶端不需要在負(fù)責(zé)對(duì)象的創(chuàng)建,從而明確了各個(gè)類的職責(zé),如果有新的對(duì)象增加,只需要增加一個(gè)具體的類和具體的工廠類即可,不影響已有的代碼,后期維護(hù)容易,增強(qiáng)了系統(tǒng)的擴(kuò)展性
缺點(diǎn)
需要額外的編寫代碼,增加了工作量

public class Demo {
    public static void main(String[] args) {
        Factory df=new DogFactory();
        Animal a=df.creatAnimal();
        a.eat();
        Factory cf=new CatFactory();
        Animal b=cf.creatAnimal();
        b.eat();
    }

}

interface Factory{
    Animal creatAnimal();
}

class DogFactory implements Factory{
    @Override
    public Animal creatAnimal() {
        return new Dog();
    }
    
}

class CatFactory implements Factory{
    @Override
    public Animal creatAnimal() {
        return new Cat();
    }
    
}

abstract class Animal {
    abstract void eat();
}

class Dog extends Animal {
    @Override
    void eat() {
        System.out.println("dog eats meat");
    }
}

class Cat extends Animal {
    @Override
    void eat() {
        System.out.println("cat eats fish");
    }
}

2.3.單例設(shè)計(jì)模式概述
單例模式就是要確保類在內(nèi)存中只有一個(gè)對(duì)象,該實(shí)例必須自動(dòng)創(chuàng)建,并且對(duì)外提供。優(yōu)點(diǎn)
在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以節(jié)約系統(tǒng)資源,對(duì)于一些需要頻繁創(chuàng)建和銷毀的對(duì)象單例模式無疑可以提高系統(tǒng)的性能。
缺點(diǎn)
沒有抽象層,因此擴(kuò)展很難。
職責(zé)過重,在一定程序上違背了單一職責(zé)

饑餓型
在類加載的時(shí)候就已經(jīng)創(chuàng)建好對(duì)象

public class Demo {
    public static void main(String[] args) {
        Student s1=Student.getStudent();
        Student s2=Student.getStudent();
        System.out.println(s1==s2);
    }

}

class Student {
    private Student() {//讓外界不能創(chuàng)建這個(gè)類的對(duì)象

    }

    private static Student s = new Student();//為了不讓外界直接訪問修改這個(gè)值,所以要加private

    static Student getStudent() {
        return s;
    }
}

懶惰式
用的時(shí)候才去創(chuàng)建對(duì)象
可能產(chǎn)生線程安全問題

public class Demo {
    public static void main(String[] args) {
        Teacher t1=Teacher.getTeacher();
        Teacher t2=Teacher.getTeacher();
        System.out.println(t1==t2);
        
    }

}

class Teacher {
    private Teacher() {
    }

    private static Teacher t = null;

    static Teacher getTeacher() {
        if (t == null)
            t = new Teacher();
        return t;
    }
}

單例模式的應(yīng)用---Runtime類

public class Demo {
    public static void main(String[] args) {
        Runtime run=Runtime.getRuntime();
        try {
            run.exec("calc");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

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

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

相關(guān)文章

  • CZ深入淺出Java基礎(chǔ))線程筆記

    摘要:一個(gè)進(jìn)程如果有多條執(zhí)行路徑,則稱為多線程程序。這可能拋出在當(dāng)前線程中??紤]多線程的數(shù)據(jù)安全問題是否是多線程環(huán)境。當(dāng)前線程必須擁有此對(duì)象監(jiān)視器。此方法導(dǎo)致當(dāng)前線程稱之為將其自身放置在對(duì)象的等待集中,然后放棄此對(duì)象上的所有同步要求。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、線程的引入 1.多線程概述 進(jìn)程 a.正在運(yùn)行的程序,是...

    harryhappy 評(píng)論0 收藏0
  • CZ深入淺出Java基礎(chǔ))反射

    摘要:分類根類加載器也被稱為引導(dǎo)類加載器,負(fù)責(zé)核心類的加載比如等。要想解剖一個(gè)類必須先要獲取到該類的字節(jié)碼文件對(duì)象。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、類的加載 1.類初始化的時(shí)機(jī) 創(chuàng)建類的實(shí)例訪問類的靜態(tài)變量,或者為靜態(tài)變量賦值調(diào)用類的靜態(tài)方法使用反射方式來強(qiáng)制創(chuàng)建某個(gè)類或接口對(duì)應(yīng)的java.lang.Class對(duì)象初始化某個(gè)類...

    asoren 評(píng)論0 收藏0
  • Java9模塊化學(xué)習(xí)筆記二之模塊設(shè)計(jì)模式

    摘要:但是模塊化當(dāng)中,無法掃描只有模塊中可以使用有兩種解決方案定義一個(gè)專門的資源模塊,并使用提供的接口,實(shí)現(xiàn)它,并將這個(gè)實(shí)現(xiàn)注冊(cè)為服務(wù)。有兩種方式使用或包名,包名模塊名使用運(yùn)行時(shí)動(dòng)態(tài)。 模塊設(shè)計(jì)的原則: 1、防止出現(xiàn)編譯時(shí)循環(huán)依賴(主要是編譯器不支持),但運(yùn)行時(shí)是允許循環(huán)依賴的,比如GUI應(yīng)用2、明確模塊的邊界 幾種模塊設(shè)計(jì): API模塊,聚合模塊(比如java.base) 可選依賴 兩種方...

    李文鵬 評(píng)論0 收藏0
  • 那些年我看過的書 —— 致敬我的大學(xué)生活 —— Say Good Bye !

    摘要:開頭正式開啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎(chǔ)上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...

    xiaoqibTn 評(píng)論0 收藏0
  • 后臺(tái)開發(fā)常問面試題集錦(問題搬運(yùn)工,附鏈接)

    摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...

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

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

0條評(píng)論

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