設(shè)計模式系列:迭代器和單例模式

場景

這個場景好像不用太多說淋淀,主要是減少new的數(shù)量,確保實例唯一覆醇。

代碼

//version1
public class SingleFactory {
    private static SingleFactory singleFactory = new SingleFactory();
    private SingleFactory(){
        System.out.println("init method");
    }
    public static SingleFactory getInstance(){
        return singleFactory;
    }
}

public class HungrySingleFactory {
    private static HungrySingleFactory hungrySingleFactory;
    private HungrySingleFactory(){
        System.out.println("init");
    }
    public static HungrySingleFactory getInstance(){
        if(hungrySingleFactory == null) {
            synchronized (HungrySingleFactory.class) {
                if(hungrySingleFactory == null) {
                    hungrySingleFactory = new HungrySingleFactory();
                }
            }
        }
        return hungrySingleFactory;
    }
}

定義

保證一個類只有一個實例朵纷,并提供一個訪問它的全局訪問點

類圖

單例模式.gif

場景

現(xiàn)在公交車都是上車刷卡。但是在90年代初都是在每輛公交車上有收費員跟隨公交車永脓,每站上車來的人需要和收費員買票

代碼

public class Ticket {
    private String startStation;
    private String endStation;
    private int stationNum;
    private double money;
}

public class Passenger {
    private Ticket ticket;
    public Ticket getTicket() {
        return ticket;
    }
    public void setTicket(Ticket ticket) {
        this.ticket = ticket;
    }
}

public class Bus {
    private List<Passenger> passengerList = new ArrayList<Passenger>();
    public void addPassenger(Passenger passenger) {
        passengerList.add(passenger);
    }
    public void removePassenger(Passenger passenger) {
        passengerList.remove(passenger);
    }
    public int getPassengerNum() {
        return passengerList.size();
    }
    public Passenger getPassenger(int index) {
        return passengerList.get(index);
    }
}

public interface Iterator {
    public boolean hasNext();
    public Object next();
}

public class Cashier implements Iterator {
    private Bus bus;
    public Cashier(Bus bus) {
        this.bus = bus;
    }
    int num = 1;
    public void reset(){
        num = 1;
    }
    public boolean hasNext() {
        return num < bus.getPassengerNum();
    }
    public Passenger next() {
        Passenger passenger = bus.getPassenger(num);
        num++;
        return passenger;
    }
    public void iterator() {
        reset();
        while(hasNext()){
            Passenger passenger = next();
            Ticket pTicket = passenger.getTicket();
            if(pTicket == null) {
                System.out.println("請你立刻買票");
            }
        }
    }
    public Ticket pushTicket(String startStation, String endStation, int stationNum, int money) {
        Ticket ticket = new Ticket();
        ticket.setStartStation(startStation);
        ticket.setEndStation(endStation);
        ticket.setStationNum(stationNum);
        ticket.setMoney(money);
        return ticket;
    }
}

public class Tester {
    public static void main(String[] args) {
        Bus bus = new Bus();
        Cashier cashier = new Cashier(bus);
        Passenger p1 = new Passenger();
        bus.addPassenger(p1);
        Passenger p2 = new Passenger();
        Ticket ticket = cashier.pushTicket("上海","婺源",3, 10);
        p2.setTicket(ticket);
        bus.addPassenger(p2);
        Passenger p3 = new Passenger();
        bus.addPassenger(p3);
        cashier.iterator();
      
        Passenger p4 = new Passenger();
        bus.addPassenger(p4);
        bus.removePassenger(p2);
        cashier.iterator();
    }
}

定義

提供一種方法順序訪問一個聚合對象中各個元素袍辞,而又不暴露該對象的內(nèi)部表示。

類圖

Iterator.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末常摧,一起剝皮案震驚了整個濱河市搅吁,隨后出現(xiàn)的幾起案子威创,更是在濱河造成了極大的恐慌,老刑警劉巖谎懦,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肚豺,死亡現(xiàn)場離奇詭異,居然都是意外死亡界拦,警方通過查閱死者的電腦和手機吸申,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來享甸,“玉大人截碴,你說我怎么就攤上這事◎韧” “怎么了隐岛?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓷翻。 經(jīng)常有香客問我聚凹,道長,這世上最難降的妖魔是什么齐帚? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任妒牙,我火速辦了婚禮,結(jié)果婚禮上对妄,老公的妹妹穿的比我還像新娘湘今。我一直安慰自己,他們只是感情好剪菱,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布摩瞎。 她就那樣靜靜地躺著,像睡著了一般孝常。 火紅的嫁衣襯著肌膚如雪旗们。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天构灸,我揣著相機與錄音上渴,去河邊找鬼。 笑死喜颁,一個胖子當(dāng)著我的面吹牛稠氮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播半开,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼隔披,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了寂拆?” 一聲冷哼從身側(cè)響起奢米,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤芥炭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后恃慧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體园蝠,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年痢士,在試婚紗的時候發(fā)現(xiàn)自己被綠了彪薛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡怠蹂,死狀恐怖善延,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情城侧,我是刑警寧澤易遣,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嫌佑,受9級特大地震影響豆茫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜屋摇,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一揩魂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炮温,春花似錦火脉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至担巩,卻和暖如春方援,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兵睛。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工肯骇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祖很。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像漾脂,于是被迫代替她去往敵國和親假颇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,078評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法骨稿,類相關(guān)的語法笨鸡,內(nèi)部類的語法姜钳,繼承相關(guān)的語法,異常的語法形耗,線程的語...
    子非魚_t_閱讀 31,623評論 18 399
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)哥桥,是說軟件實體(類、模塊激涤、函數(shù)等等)應(yīng)該可以拓展拟糕,但是不可修改。開-閉原...
    西山薄涼閱讀 3,792評論 3 14
  • 日本央行一直致力于將日本經(jīng)濟拉出低通脹的環(huán)境倦踢。但是送滞,所采用的貨幣政策似乎不是那么的有效,市場對這些貨幣政策...
    小小杠桿閱讀 359評論 1 2
  • 零零散散一周的時間,我看完了這本書晤碘,按照知識管理訓(xùn)練營速讀的方法褂微,我明顯不是一個好學(xué)生。 我的印象中园爷,我是知道并且...
    謝筱言閱讀 323評論 2 2