前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel之容器(实战)背景设计客户端代码总结参考

Laravel之容器(实战)背景设计客户端代码总结参考

作者头像
zhuanxu
发布2018-08-23 12:48:06
2760
发布2018-08-23 12:48:06
举报
文章被收录于专栏:进击的程序猿进击的程序猿

背景

需求描述

接到上面一个需求,要设计一个英雄打怪,怎么做呢?

设计

简要的设计图

设计图

我们可以看到Role通过依赖注入武器,这样子,我们就可以随时替换攻击策略了。

客户端代码

在客户端使用,我们先给出没有使用容器的方式:

 public function test_use_sword()
    {
        //生成怪物
        $monster1 = new Monster( "小怪A", 50 );
        $monster2 = new Monster( "小怪B", 50 );
        $monster3 = new Monster( "关主", 200 );
        $monster4 = new Monster( "最终Boss", 1000 );

        //生成角色
        $role = new Role("超级英雄");

        //木剑攻击
        $role->setWeapon(new WoodSword());
        $role->attack($monster1);
        //铁剑攻击
        $role->setWeapon(new IronSword());
        $role->attack($monster2);
        $role->attack($monster3);

        //魔剑攻击
        $role->setWeapon(new MagicSword());
        $role->attack($monster3);
        $role->attack($monster4);
        $role->attack($monster4);
        $role->attack($monster4);
    }

再给出使用容器的方式:

public function test_user_container()
    {
        $container = new Container();
        $container->bind('GameDemo\IAttackStrategy','GameDemo\WoodSword');

        //生成怪物
        $monster1 = new Monster( "小怪A", 50 );
        $monster2 = new Monster( "小怪B", 50 );
        $monster3 = new Monster( "关主", 200 );
        $monster4 = new Monster( "最终Boss", 1000 );

        //生成角色
        /**
         * @var Role
         */
        $role = $container->make('GameDemo\Role',['英雄']);
        $container->rebinding('GameDemo\IAttackStrategy',function($c, $weapon) use($role){
            $role->setWeapon($weapon);
        });
        //木剑攻击
        $role->attack($monster1);
        //铁剑攻击
        $container->bind('GameDemo\IAttackStrategy','GameDemo\IronSword');
        $role->attack($monster2);
        $role->attack($monster3);

        //魔剑攻击
        $container->bind('GameDemo\IAttackStrategy','GameDemo\MagicSword');
        $role->attack($monster3);
        $role->attack($monster4);
        $role->attack($monster4);
        $role->attack($monster4);
    }

对比后,可以发现,使用容器后,客户端不用自己去实例化武器了,全都交给容器去做,极大的简化了客户端。

总结

多态的活性与依赖注入

参考

依赖注入那些事儿

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.06.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 设计
  • 客户端代码
  • 总结
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档