PHP设计模式之抽象工厂模式(二)

平面继承层次的出现是工厂方法模式带来的一个问题。每次添加产品家族时,你就被迫去创建一个相关的具体创造者。一个快速增长的系统会包含原来越多的产品,这样维护起来就会非常的恶心。

一个避免这种依赖的办法就是使用clone复制已存在的具体产品,具体产品本身便成了它们自己生成的基础。

<?php

/**
 * 这是一片海
 */
class Sea{}
class EarthSea extends Sea{}
class MarsSea extends Sea{}

/**
 * 这是一片平原
 */
class Plains{}
class EarthPlains extends Plains{}
class MarsPlains extends Plains{}

/**
 * 这是一片深林
 */
class Forest{}
class EarthForest extends Forest{}
class MarsForest extends Forest{}

/**
 * 造地工厂
 */
class TerrainFactory {
    private $sea;
    private $plains;
    private $forest;

    function __construct(Sea $sea, Plains $plains, Forest $forest){
        $this->sea = $sea;
        $this->plains = $plains;
        $this->forest = $forest;
    }

    function getSea(){
        return clone $this->sea;
    }

    function getPlains(){
        return clone $this->plains;
    }

    function getForest(){
        return clone $this->forest;
    }
}

$factory = new TerrainFactory(new EarthSea(),new EarthPlains(),new MarsForest());
print_r($factory->getSea());
print_r($factory->getPlains());
print_r($factory->getForest());

使用该模式我们可以用组合代替继承,这样的转变则促进了代码运行时的灵活性,并减少了必须创建的类。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇