門面模式-Facade Pattern(Java實現)

來源:互聯網
上載者:User

標籤:img   問題   sys   stat   end   載入驅動   門面模式   abs   建立串連   

門面模式-Facade Pattern

為一個複雜的模組或子系統提供一個簡單的供外界訪問的介面

本文中代碼的例子如下: 一個礦場有很多礦工, 礦工的職責也都不一樣. 但一樣的是什麼呢? 一樣的就是每個礦工每天都在重複一樣的事情....起床, 上班, 工作, 下班, 睡覺......

要想管理這麼多礦工的這麼多事情可不簡單(好麻煩啊...挨個調用的時候開發人員也有可能會忘掉某個人, 或者忘掉某一個方法).,

 

再舉個栗子, 比如操作資料庫也一樣, 要載入驅動, 建立串連, 操作資料庫, 關閉串連. 這麼多步驟忘掉一個都會是個問題.

MineWorker抽象類別

這裡是礦場中工人的統一抽象定義.

public abstract class MineWorker {    protected void goToSleep() {        System.out.printf("%s 睡覺.\n", name());    }    protected void wakeUp() {        System.out.printf("%s 早上醒過來.\n", name());    }    protected void goHome() {        System.out.printf("%s 回家.\n", name());    }    protected void goToMine() {        System.out.printf("%s 去礦場.\n", name());    }    protected abstract void work();    protected abstract String name();    public static enum Action {        GO_TO_SLEEP, WAKE_UP, GO_HOME, GO_TO_MINE, WORK    }    public void action(Action... actions) {        for (Action action : actions) {            switch (action) {                case GO_TO_SLEEP:                    goToSleep();                    break;                case WAKE_UP:                    wakeUp();                    break;                case GO_HOME:                    goHome();                    break;                case GO_TO_MINE:                    goToMine();                    break;                case WORK:                    work();                    break;                default:                    System.out.println("Undefined action");                    break;            }        }    }}
CartOperator類

推車工人.

public class CartOperator extends MineWorker {    @Override    public void work() {        System.out.printf("%s 運輸礦石 \n", name());    }    @Override    public String name() {        return "推車工人";    }}  
GoldDigger類

挖金礦工人

public class GoldDigger extends MineWorker {    @Override    public void work() {        System.out.printf("%s 挖金礦 .\n", name());    }    @Override    public String name() {        return "挖礦金工人";    }}
TunnelDigger類

挖隧道工人.

public class TunnelDigger extends MineWorker {    @Override    public void work() {        System.out.printf("%s 挖隧道.\n", name());    }    @Override    public String name() {        return "挖隧道工人";    }}
MineFacade類

本系統的門面, 用於對外提供一個簡單的介面.

import java.util.ArrayList;import java.util.Collection;import java.util.List;public class MineFacade {    private final List<MineWorker> mineWorkers;    public MineFacade() {        mineWorkers = new ArrayList<>();        mineWorkers.add(new GoldDigger());        mineWorkers.add(new CartOperator());        mineWorkers.add(new TunnelDigger());    }    public void startNewDay() {        makeActions(mineWorkers, MineWorker.Action.WAKE_UP, MineWorker.Action.GO_TO_MINE);    }    public void digOutGold() {        makeActions(mineWorkers, MineWorker.Action.WORK);    }    public void endDay() {        makeActions(mineWorkers, MineWorker.Action.GO_HOME, MineWorker.Action.GO_TO_SLEEP);    }    private static void makeActions(Collection<MineWorker> mineWorkers,                                    MineWorker.Action... actions) {        for (MineWorker mineWorker : mineWorkers) {            mineWorker.action(actions);        }    }}
Main

在這運行

public class Main {    public static void main(String[] args) {        // 執行個體化一個門面, 這是礦場對外提供的一個簡單的介面        MineFacade mineFacade = new MineFacade();        // 開始新的一天        mineFacade.startNewDay();        // 大家起來幹活        mineFacade.digOutGold();        // 一天結束啦        mineFacade.endDay();    }}

運行結果如下:

門面模式-Facade Pattern(Java實現)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.