摘要:今天上課的時(shí)候老師開始講個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計(jì)模式以及上課的例子,后期會(huì)補(bǔ)充關(guān)于的應(yīng)用保證一個(gè)類僅有一個(gè)實(shí)例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實(shí)例。原始對象與副本引用同一對象。
今天上課的時(shí)候老師開始講23個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。
其中參考《大話設(shè)計(jì)模式》以及上課的例子(java),后期會(huì)補(bǔ)充關(guān)于js的應(yīng)用
Singleton 保證一個(gè)類僅有一個(gè)實(shí)例。讓類自身負(fù)責(zé)保存它的唯一實(shí)例。
(使用場景:繪圖程序中的工具箱,無需每次點(diǎn)擊按鈕都重新創(chuàng)建一個(gè)工具箱對象)
單例模式與實(shí)用類(例如Math)的區(qū)別:實(shí)用類不保存狀態(tài),僅提供靜態(tài)方法或靜態(tài)屬性來使用,并且不能用于集成多態(tài)。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實(shí)例。
/*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 將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類可以一起工作
(生活場景:姚明去NBA打球時(shí)不會(huì)英語,需要翻譯來與教練、球員溝通)
(使用場景:在雙方都不太容易修改的時(shí)候,可以使用。應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但接口不兼容的情況)
Iterator 提供一種方法順序訪問一個(gè)聚合對象中各個(gè)元素,又不暴露該對象的內(nèi)部表示
(生活場景:售票員依次對車上所有人售票)
(使用場景:需要對聚集有多種方式遍歷時(shí)。【但.Net和JAVA中其實(shí)都已提供相關(guān)接口】)
/*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迭代器呢?因?yàn)椴煌木酆蠈ο笥胁煌母咝У脑L問方式,例如數(shù)組可以直接返回下標(biāo),但對于鏈表、樹而言顯然需要另外一種方式。
Prototype 用原型實(shí)例制定創(chuàng)建對象的種類,并通過拷貝這些原型來創(chuàng)建新對象
(生活場景:簡歷的復(fù)印。如果需要三份簡歷需要實(shí)例化簡歷三次,這時(shí)也使用原型模式)
原型模式就是從一個(gè)對象再創(chuàng)建另外一個(gè)可定制的對象,并且不需要知道任何創(chuàng)建的細(xì)節(jié)。等于不同重新初始化對象,而是動(dòng)態(tài)獲得對象運(yùn)行時(shí)的狀態(tài)。大大提高了性能。
【ps:淺拷貝與深拷貝】 淺拷貝:如果字段是值類型(例如int,float),則逐位復(fù)制。若字段是引用類型,只復(fù)制引用但不復(fù)制引用的對象。原始對象與副本引用同一對象。 深拷貝則是同時(shí)復(fù)制引用對象。把引用對象的變量指向復(fù)制過的新對象。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79315.html
摘要:今天上課的時(shí)候老師開始講個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計(jì)模式以及上課的例子,后期會(huì)補(bǔ)充關(guān)于的應(yīng)用保證一個(gè)類僅有一個(gè)實(shí)例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實(shí)例。原始對象與副本引用同一對象。 今天上課的時(shí)候老師開始講23個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設(shè)計(jì)模式》以及上課的例子(java),后期會(huì)補(bǔ)充關(guān)于js的應(yīng)用 ...
摘要:它是語言的第七種數(shù)據(jù)類型前六種是布爾值字符串?dāng)?shù)值對象。為了防止沖突這就是引入的原因。指向了這個(gè)內(nèi)部方法調(diào)用了返回對象的屬性等于一個(gè)布爾值,表示該對象使用時(shí),是否可以展開。數(shù)組的默認(rèn)行為是可以展開返回對象的屬性,指向當(dāng)前對象的構(gòu)造函數(shù)。 es6學(xué)習(xí)筆記-Symbol_v1.0 基本抄了一次內(nèi)容,有很多只是知道其然并不知其所以然,不過也算是加深了一次印象,另外每段代碼我都有手動(dòng)執(zhí)行過. E...
摘要:高質(zhì)量特性面向?qū)ο螅瑹o類,原型可維護(hù)的代碼可讀一致可預(yù)測看起來像是同一個(gè)人寫的文檔減少全局對象,傳參訪問全局對象單模式,忘記時(shí)的副作用顯式聲明的全局變量無法用刪除不擴(kuò)充內(nèi)置原型模式每個(gè)和對齊這里不考慮花括號相關(guān)的縮進(jìn)規(guī)則每個(gè)中的代碼整齊縮進(jìn) 高質(zhì)量Javascript Javascript特性:面向?qū)ο螅瑹o類,原型 可維護(hù)的代碼(可讀;一致;可預(yù)測;看起來像是同一個(gè)人寫的;文檔) 減...
摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設(shè)計(jì)模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設(shè)計(jì)模式(Design pattern)是什么 設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設(shè)計(jì)的經(jīng)驗(yàn)總結(jié)。使用設(shè)計(jì)模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會(huì)有設(shè)計(jì)模式 在軟件開發(fā)過...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計(jì)模式五適配器模式適配器模式將某個(gè)對象的接生成器和協(xié)程的實(shí)現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個(gè)更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實(shí)戰(zhàn)) 這篇文章主要介紹利用 R...
閱讀 3473·2021-09-02 09:53
閱讀 1799·2021-08-26 14:13
閱讀 2759·2019-08-30 15:44
閱讀 1318·2019-08-30 14:03
閱讀 1968·2019-08-26 13:42
閱讀 3019·2019-08-26 12:21
閱讀 1307·2019-08-26 11:54
閱讀 1902·2019-08-26 10:46