摘要:在設計模式中,所有的設計模式都遵循這一原則。其實就是說在應用程序中,所有的類如果使用或依賴于其他的類,則應該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設計模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。
這是劉意老師的JAVA基礎教程的筆記
講的賊好,附上傳送門
傳智風清揚-超全面的Java基礎
一、面向對象思想設計原則 1.單一職責原則其實就是開發人員經常說的”高內聚,低耦合”,也就是說,每個類應該只有一個職責,對外只能提供一種功能,而引起類變化的原因應該只有一個。在設計模式中,所有的設計模式都遵循這一原則。
2.開閉原則核心思想是:一個對象對擴展開放,對修改關閉。
其實開閉原則的意思就是:對類的改動是通過增加代碼進行的,而不是修改現有代碼。
也就是說軟件開發人員一旦寫出了可以運行的代碼,就不應該去改動它,而是要保證它能一直運行下去,如何能夠做到這一點呢?這就需要借助于抽象和多態,即把可能變化的內容抽象出來,從而使抽象的部分是相對穩定的,而具體的實現則是可以改變和擴展的。
核心思想:在任何父類出現的地方都可以用它的子類來替代。
其實就是說:同一個繼承體系中的對象應該有共同的行為特征。
核心思想:要依賴于抽象,不要依賴于具體實現。
其實就是說:在應用程序中,所有的類如果使用或依賴于其他的類,則應該依賴這些其他類的抽象類,而不是這些其他類的具體類。為了實現這一原則,就要求我們在編程的時候針對抽象類或者接口編程,而不是針對具體實現編程。
核心思想:不應該強迫程序依賴它們不需要使用的方法。
其實就是說:一個接口不需要提供太多的行為,一個接口應該只提供一種對外的功能,不應該把所有的操作都封裝到一個接口中。
6.迪米特原則
核心思想:一個對象應當對其他對象盡可能少的了解
其實就是說:降低各個對象之間的耦合,提高系統的可維護性。在模塊之間應該只通過接口編程,而不理會模塊的內部工作原理,它可以使各個模塊耦合度降到最低,促進軟件的復用
1.1.概念
設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。
設計模式不是一種方法和技術,而是一種思想
設計模式和具體的語言無關,學習設計模式就是要建立面向對象的思想,盡可能的面向接口編程,低耦合,高內聚,使設計的程序可復用
學習設計模式能夠促進對面向對象思想的理解,反之亦然。它們相輔相成
1.2.要素
名字 必須有一個簡單,有意義的名字
問題 描述在何時使用模式
解決方案 描述設計的組成部分以及如何解決問題
效果 描述模式的效果以及優缺點
1.3.分類
創建型模式 對象的創建:簡單工廠模式,工廠方法模式,抽象工廠模式,建造者模式,原型模式,單例模式。(6個)
結構型模式 對象的組成(結構):外觀模式、適配器模式、代理模式、裝飾模式、橋接模式、組合模式、享元模式。(7個)
行為型模式 對象的行為:模版方法模式、觀察者模式、狀態模式、職責鏈模式、命令模式、訪問者模式、策略模式、備忘錄模式、迭代器模式、解釋器模式。(10個)
2.創建型模式具體使用2.1.簡單工廠模式
又叫靜態工廠方法模式,它定義一個具體的工廠類負責創建一些類的實例
優點
客戶端不需要在負責對象的創建,從而明確了各個類的職責
缺點
這個靜態工廠類負責所有對象的創建,如果有新的對象增加,或者某些對象的創建方式不同,就需要不斷的修改工廠類,不利于后期的維護
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.工廠方法模式
工廠方法模式中抽象工廠類負責定義創建對象的接口,具體對象的創建工作由繼承抽象工廠的具體類實現。
優點
客戶端不需要在負責對象的創建,從而明確了各個類的職責,如果有新的對象增加,只需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,后期維護容易,增強了系統的擴展性
缺點
需要額外的編寫代碼,增加了工作量
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.單例設計模式概述
單例模式就是要確保類在內存中只有一個對象,該實例必須自動創建,并且對外提供。優點
在系統內存中只存在一個對象,因此可以節約系統資源,對于一些需要頻繁創建和銷毀的對象單例模式無疑可以提高系統的性能。
缺點
沒有抽象層,因此擴展很難。
職責過重,在一定程序上違背了單一職責
饑餓型
在類加載的時候就已經創建好對象
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() {//讓外界不能創建這個類的對象 } private static Student s = new Student();//為了不讓外界直接訪問修改這個值,所以要加private static Student getStudent() { return s; } }
懶惰式
用的時候才去創建對象
可能產生線程安全問題
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; } }
單例模式的應用---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(); } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67510.html
摘要:一個進程如果有多條執行路徑,則稱為多線程程序。這可能拋出在當前線程中。考慮多線程的數據安全問題是否是多線程環境。當前線程必須擁有此對象監視器。此方法導致當前線程稱之為將其自身放置在對象的等待集中,然后放棄此對象上的所有同步要求。 這是劉意老師的JAVA基礎教程的筆記講的賊好,附上傳送門 傳智風清揚-超全面的Java基礎 一、線程的引入 1.多線程概述 進程 a.正在運行的程序,是...
摘要:分類根類加載器也被稱為引導類加載器,負責核心類的加載比如等。要想解剖一個類必須先要獲取到該類的字節碼文件對象。 這是劉意老師的JAVA基礎教程的筆記講的賊好,附上傳送門 傳智風清揚-超全面的Java基礎 一、類的加載 1.類初始化的時機 創建類的實例訪問類的靜態變量,或者為靜態變量賦值調用類的靜態方法使用反射方式來強制創建某個類或接口對應的java.lang.Class對象初始化某個類...
摘要:但是模塊化當中,無法掃描只有模塊中可以使用有兩種解決方案定義一個專門的資源模塊,并使用提供的接口,實現它,并將這個實現注冊為服務。有兩種方式使用或包名,包名模塊名使用運行時動態。 模塊設計的原則: 1、防止出現編譯時循環依賴(主要是編譯器不支持),但運行時是允許循環依賴的,比如GUI應用2、明確模塊的邊界 幾種模塊設計: API模塊,聚合模塊(比如java.base) 可選依賴 兩種方...
摘要:開頭正式開啟我入職的里程,現在已是工作了一個星期了,這個星期算是我入職的過渡期,算是知道了學校生活和工作的差距了,總之,盡快習慣這種生活吧。當時是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 2092·2021-11-15 17:57
閱讀 762·2021-11-11 16:54
閱讀 2608·2021-09-27 13:58
閱讀 4113·2021-09-06 15:00
閱讀 966·2021-09-04 16:45
閱讀 3520·2019-08-30 15:56
閱讀 1797·2019-08-30 15:53
閱讀 1643·2019-08-30 14:12