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