計(jì)算器——簡(jiǎn)單工廠模式

1.目錄結(jié)構(gòu)

目錄結(jié)構(gòu).png

2.工廠模式解析

待補(bǔ)充

3.計(jì)算基類

class BaseOperator
{
    private $num_1    =  null;
    private $num_2    =  null;

    public function setFirstNum($num)
    {
        $this->num_1   =  $num;
    }

    public function setSecondNum($num)
    {
        $this->num_2   =  $num;
    }

    public function getFirstNum()
    {
        return $this->num_1;
    }

    public function getSecondNum()
    {
        return $this->num_2;
    }
}

4.計(jì)算接口類

interface InterfaceOperator
{
    function doOperate();
}

5.計(jì)算類

include_once './BaseOperator.php';
include_once './InterfaceOperator.php';

class ActionAdd extends BaseOperator implements InterfaceOperator
{
    // 加法
    public function doOperate()
    {
        $result   =  null;
        $num_1    =  parent::getFirstNum();
        $num_2    =  parent::getSecondNum();
        $result   =  $num_1 + $num_2;
        return $result;
    }
}

class ActionSub extends BaseOperator implements InterfaceOperator
{
    // 減法
    public function doOperate()
    {
        $result    =  null;
        $num_1     =  parent::getFirstNum();
        $num_2     =  parent::getSecondNum();
        $result    =  $num_1 - $num_2;
        return $result;
    }
}

class ActionDiv extends BaseOperator implements InterfaceOperator
{
    // 除法
    public function doOperate()
    {
        $result    =  null;
        $num_1     =  parent::getFirstNum();
        $num_2     =  parent::getSecondNum();
        if ($num_2 == 0) {
            throw new \Exception('Number invalid', '2202');
        }
        $result    =  $num_1 / $num_2;
        return $result;
    }
}

class ActionMul extends BaseOperator implements InterfaceOperator
{
    // 乘法
    public function doOperate()
    {
        $result    =  null;
        $num_1     =  parent::getFirstNum();
        $num_2     =  parent::getSecondNum();
        $result    =  $num_1 * $num_2;
        return $result;
    }
}

6.計(jì)算工廠類

include_once './FunctionOperator.php';

class FactoryOperator
{

    /**
     * @param $operation
     * @return ActionAdd|ActionDiv|ActionMul|ActionSub
     * @throws Exception
     */
    public static function factory($operation)
    {
        switch($operation)
        {
            case "+":
                $operator    =  new ActionAdd();
                break;
            case "-":
                $operator    =  new ActionSub();
                break;
            case "*":
                $operator    =  new ActionMul();
                break;
            case "/":
                $operator    =  new ActionDiv();
                break;
            default:
                throw new \Exception('Operation invalid', '2202');
                break;
        }
        return $operator;
    }
}

6.模擬

include_once './FactoryOperator.php';
try {
    $operator    =  FactoryOperator::factory('*');
    $operator->setFirstNum(4);
    $operator->setSecondNum(2);
    $result      =  $operator->doOperate();
    echo "Result is $result";
} catch (\Exception $e) {
    echo $e->getTraceAsString();
}
效果.png

7.感想

通過(guò)分層達(dá)到了解耦的目的鹿霸。感覺(jué)越高級(jí)的東西就有越多的分層路克,在分層的道路上越走越遠(yuǎn)擂红。
工廠類的左右是實(shí)例化一個(gè)對(duì)象脚翘,也僅僅是實(shí)例化一個(gè)對(duì)象再层。其他屬性不要在工廠類里面進(jìn)行設(shè)置跷坝,而是在實(shí)例化之后進(jìn)行設(shè)置(setFirstNum...)倦蚪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市痢法,隨后出現(xiàn)的幾起案子狱窘,更是在濱河造成了極大的恐慌,老刑警劉巖财搁,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘸炸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尖奔,警方通過(guò)查閱死者的電腦和手機(jī)搭儒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)穷当,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人淹禾,你說(shuō)我怎么就攤上這事馁菜。” “怎么了铃岔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵汪疮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我毁习,道長(zhǎng)智嚷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任纺且,我火速辦了婚禮盏道,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘载碌。我一直安慰自己猜嘱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布嫁艇。 她就那樣靜靜地躺著泉坐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裳仆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天孤钦,我揣著相機(jī)與錄音歧斟,去河邊找鬼。 笑死偏形,一個(gè)胖子當(dāng)著我的面吹牛静袖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播俊扭,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼队橙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了萨惑?” 一聲冷哼從身側(cè)響起捐康,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庸蔼,沒(méi)想到半個(gè)月后解总,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐仅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年花枫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻盐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劳翰,死狀恐怖敦锌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佳簸,我是刑警寧澤乙墙,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站溺蕉,受9級(jí)特大地震影響伶丐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疯特,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一哗魂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漓雅,春花似錦录别、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抱冷,卻和暖如春崔列,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旺遮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工赵讯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耿眉。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓边翼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鸣剪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子组底,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)筐骇,斷路器瑞筐,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,080評(píng)論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法庆械,類相關(guān)的語(yǔ)法焕窝,內(nèi)部類的語(yǔ)法今野,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法饺鹃,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,623評(píng)論 18 399
  • 一莫秆、設(shè)計(jì)模式的分類 總體來(lái)說(shuō)設(shè)計(jì)模式分為三大類: 創(chuàng)建型模式间雀,共五種:工廠方法模式、抽象工廠模式镊屎、單例模式惹挟、建造者...
    lichengjin閱讀 893評(píng)論 0 8
  • 某西雅圖SaaS公司的結(jié)帳界面有兩種收費(fèi)周期選項(xiàng),按月或者按年缝驳。一般86%用戶選擇按月连锯,14%的用戶按年。 有一天...
    freev閱讀 332評(píng)論 1 1