ホームページ > php教程 > php手册 > php Flyweight享元模式使用例子

php Flyweight享元模式使用例子

WBOY
リリース: 2016-05-25 16:45:58
オリジナル
784 人が閲覧しました

星际的战斗达到后面,地图里面的部队很多,如果我们把每个兵的图像动画和属性值作为一个对象的话,系统的内存里会消耗极大.我们在玩的时候会发现,因为星际里面的种族只有三个,其实兵种只有几十个.

虽然每个独立的士兵剩余的血不同,但是同一兵种的图像动画是一样的,即使不同的玩家,只是不同的颜色,比如每个人族的机枪兵.而且大多数玩家只用到常用的一些兵种,很多时候不会制造所有的兵种.

待解决的问题:把把兵种的图像动画共享.

思路:我们把每个兵种的图像动画建模作为对象,放入内存共享,一旦有某个画面用到这个兵种,只要把共享的图像动画拿出来,更改颜色就可以了.

享元(Flyweight)模式示例,代码如下:

<?php
//机枪兵享元
class MarineFlyweight {
    //绘制机枪兵的图像动画,参数为状态,比如属于哪一个玩家
    public function drawMarine($state) {
        //绘制机枪兵
        
    }
}
//享元工厂
class FlyweightFactory {
    //享元数组,用于存放多个享元
    private $flyweights;
    //获取享元的方法
    public function getFlyweight($name) {
        if (!isset($flyweights[$name])) {
            $flyweights[$name] = new $name . "Flyweight";
        }
        return $flyweights[$name];
    }
}
//初始化享元工厂
$flyweightFactory = new FlyweightFactory();
//当我们需要绘制一个机枪兵的时候,同时传递一个状态数组,里面包含剩余的血等等
$marine = $flyweightFactory->getFlyweight("Marine");
$marine->drawMarine($status);
?>
ログイン後にコピー

用途总结:享元模式可以将需要共享的资源集中起来,统一管理,防止重复消耗.

实现总结:需要一个享元工厂管理共享的资源,比如上面的FlyweightFactory,把所有共享的资源的生产全部交给个享元工厂.

文章地址:

转载随意^^请带上本文地址!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート