摘要:今天上課的時候老師開始講個設計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設計模式以及上課的例子,后期會補充關于的應用保證一個類僅有一個實例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。原始對象與副本引用同一對象。
今天上課的時候老師開始講23個設計模式,為加深印象,特開一篇文章來做記錄。
其中參考《大話設計模式》以及上課的例子(java),后期會補充關于js的應用
Singleton 保證一個類僅有一個實例。讓類自身負責保存它的唯一實例。
(使用場景:繪圖程序中的工具箱,無需每次點擊按鈕都重新創(chuàng)建一個工具箱對象)
單例模式與實用類(例如Math)的區(qū)別:實用類不保存狀態(tài),僅提供靜態(tài)方法或靜態(tài)屬性來使用,并且不能用于集成多態(tài)。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。
/*Singleton.java*/ public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleton; } } /*Main.java*/ public class Main { public static void main(String[] args) { System.out.println("Start."); Singleton obj1 = Singleton.getInstance(); Singleton obj2 = Singleton.getInstance(); System.out.println("End."); } }
需要注意的是,靜態(tài)方法需要添加互斥
Adapter 將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作
(生活場景:姚明去NBA打球時不會英語,需要翻譯來與教練、球員溝通)
(使用場景:在雙方都不太容易修改的時候,可以使用。應用于希望復用一些現(xiàn)存的類,但接口不兼容的情況)
Iterator 提供一種方法順序訪問一個聚合對象中各個元素,又不暴露該對象的內(nèi)部表示
(生活場景:售票員依次對車上所有人售票)
(使用場景:需要對聚集有多種方式遍歷時。【但.Net和JAVA中其實都已提供相關接口】)
/*Iterator.java*/ public interface Iterator { public abstract boolean hasNext(); public abstract Object next(); } /*BookShelfIterator.java*/ public class BookShelfIterator implements Iterator { private BookShelf bookShelf; private int index; public BookShelfIterator(BookShelf bookShelf) { this.bookShelf = bookShelf; this.index = 0; } public boolean hasNext() { if (index < bookShelf.getLength()) { return true; } else { return false; } } public Object next() { Book book = bookShelf.getBookAt(index); index++; return book; } }
為什么不直接使用BookShelfIterator,而需要繼承Iterator迭代器呢?因為不同的聚合對象有不同的高效的訪問方式,例如數(shù)組可以直接返回下標,但對于鏈表、樹而言顯然需要另外一種方式。
Prototype 用原型實例制定創(chuàng)建對象的種類,并通過拷貝這些原型來創(chuàng)建新對象
(生活場景:簡歷的復印。如果需要三份簡歷需要實例化簡歷三次,這時也使用原型模式)
原型模式就是從一個對象再創(chuàng)建另外一個可定制的對象,并且不需要知道任何創(chuàng)建的細節(jié)。等于不同重新初始化對象,而是動態(tài)獲得對象運行時的狀態(tài)。大大提高了性能。
【ps:淺拷貝與深拷貝】 淺拷貝:如果字段是值類型(例如int,float),則逐位復制。若字段是引用類型,只復制引用但不復制引用的對象。原始對象與副本引用同一對象。 深拷貝則是同時復制引用對象。把引用對象的變量指向復制過的新對象。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/65840.html
摘要:今天上課的時候老師開始講個設計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設計模式以及上課的例子,后期會補充關于的應用保證一個類僅有一個實例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。原始對象與副本引用同一對象。 今天上課的時候老師開始講23個設計模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設計模式》以及上課的例子(java),后期會補充關于js的應用 ...
摘要:它是語言的第七種數(shù)據(jù)類型前六種是布爾值字符串數(shù)值對象。為了防止沖突這就是引入的原因。指向了這個內(nèi)部方法調(diào)用了返回對象的屬性等于一個布爾值,表示該對象使用時,是否可以展開。數(shù)組的默認行為是可以展開返回對象的屬性,指向當前對象的構(gòu)造函數(shù)。 es6學習筆記-Symbol_v1.0 基本抄了一次內(nèi)容,有很多只是知道其然并不知其所以然,不過也算是加深了一次印象,另外每段代碼我都有手動執(zhí)行過. E...
摘要:高質(zhì)量特性面向?qū)ο螅瑹o類,原型可維護的代碼可讀一致可預測看起來像是同一個人寫的文檔減少全局對象,傳參訪問全局對象單模式,忘記時的副作用顯式聲明的全局變量無法用刪除不擴充內(nèi)置原型模式每個和對齊這里不考慮花括號相關的縮進規(guī)則每個中的代碼整齊縮進 高質(zhì)量Javascript Javascript特性:面向?qū)ο螅瑹o類,原型 可維護的代碼(可讀;一致;可預測;看起來像是同一個人寫的;文檔) 減...
摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設計模式(Design pattern)是什么 設計模式是一套被反復使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設計的經(jīng)驗總結(jié)。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設計模式 在軟件開發(fā)過...
閱讀 1624·2021-11-11 10:59
閱讀 2628·2021-09-04 16:40
閱讀 3663·2021-09-04 16:40
閱讀 2982·2021-07-30 15:30
閱讀 1621·2021-07-26 22:03
閱讀 3169·2019-08-30 13:20
閱讀 2230·2019-08-29 18:31
閱讀 442·2019-08-29 12:21