国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設計模式學習筆記(一)【Singleton、Adapter、Iterator 、Prototype

liuchengxu / 2656人閱讀

摘要:今天上課的時候老師開始講個設計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設計模式以及上課的例子,后期會補充關于的應用保證一個類僅有一個實例。單例是有狀態(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

相關文章

  • 設計模式學習筆記)【SingletonAdapterIteratorPrototype

    摘要:今天上課的時候老師開始講個設計模式,為加深印象,特開一篇文章來做記錄。其中參考大話設計模式以及上課的例子,后期會補充關于的應用保證一個類僅有一個實例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對象實例。原始對象與副本引用同一對象。 今天上課的時候老師開始講23個設計模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設計模式》以及上課的例子(java),后期會補充關于js的應用 ...

    FreeZinG 評論0 收藏0
  • es6學習筆記-Symbol_v1.0_byKL

    摘要:它是語言的第七種數(shù)據(jù)類型前六種是布爾值字符串數(shù)值對象。為了防止沖突這就是引入的原因。指向了這個內(nèi)部方法調(diào)用了返回對象的屬性等于一個布爾值,表示該對象使用時,是否可以展開。數(shù)組的默認行為是可以展開返回對象的屬性,指向當前對象的構(gòu)造函數(shù)。 es6學習筆記-Symbol_v1.0 基本抄了一次內(nèi)容,有很多只是知道其然并不知其所以然,不過也算是加深了一次印象,另外每段代碼我都有手動執(zhí)行過. E...

    Lowky 評論0 收藏0
  • FE.BASE-前端設計模式、編碼與重構(gòu)筆記

    摘要:高質(zhì)量特性面向?qū)ο螅瑹o類,原型可維護的代碼可讀一致可預測看起來像是同一個人寫的文檔減少全局對象,傳參訪問全局對象單模式,忘記時的副作用顯式聲明的全局變量無法用刪除不擴充內(nèi)置原型模式每個和對齊這里不考慮花括號相關的縮進規(guī)則每個中的代碼整齊縮進 高質(zhì)量Javascript Javascript特性:面向?qū)ο螅瑹o類,原型 可維護的代碼(可讀;一致;可預測;看起來像是同一個人寫的;文檔) 減...

    SmallBoyO 評論0 收藏0
  • PHP 設計模式概述

    摘要:創(chuàng)建型模式主要有以下五種簡單工廠模式和工廠方法模式抽象工廠模式單例模式建造者模式原型模式在設計模式一書中將工廠模式分為兩類工廠方法模式與抽象工廠模式。 一、 設計模式(Design pattern)是什么 設計模式是一套被反復使用、多數(shù)人知曉、經(jīng)過分類編目的代碼設計的經(jīng)驗總結(jié)。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 二、 為什么會有設計模式 在軟件開發(fā)過...

    IntMain 評論0 收藏0
  • PHP基礎

    摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細源碼注解 PHP 字符串操作整理 一些有關字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...

    HtmlCssJs 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<