码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2018-12-29 13:35:49      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:不用   决定   bsp   ack   instance   illegal   ret   技能   ring   

什么是简单工厂 就相当于 lol里 有亚索 有提莫这种英雄 每个英雄 要是按照攻击力 射程 护甲等等等 那每个英雄都需要一堆代码 也没有可重用性 出错了 还得去这个英雄的类一点一点找错 耦合性相当高  这么写太low 不行  那怎么办 简单 搞个父类接口  给英雄整点方法属性 比如攻击力 护甲 魔抗 移速 q技能 w技能 e技能 r技能 平a 啥的 共有的都搞父类里面 就叫hero  完事整个类 叫yasuo  实现一下hero接口 然后具体实现方法 都有什么技能 斩刚闪  就重写q技能的方法  再搞个提莫类 整整属性方法啥的 现在就有两个英雄了 再搞个factory类 管理一下已经实现hero类的英雄

写个方法 hero getCarInstance(String 类名) 就在里面传一个类名 这个类名从别的地方传进来这个方法 比如召唤师选亚索了 就传入个yasuo进来 然后呢 hero hero=new yasuo(); 这个英雄就被赋成亚索了 里面亚索属性 技能等实现  然后把这个被赋成亚索的对象 给他返回去 召唤师就可以用亚索类里面的技能了(这里还是不推荐使用亚索)  但问题又来了  那这么写 万一他选了个刀妹 那怎么办呢 那是不是还得修改factory工厂 最好不要这么干 太麻烦了 那怎么办 搞个反射 传个类名进来 用反射去决定到底new那个类

class Factory{

    public static Hero getCarInstance(String type){

       Hero hero=null;

        try {

            hero=(Hero)Class.forName("包名地址."+type).newInstance();//利用反射得到英雄

        } catch (InstantiationException e) {

            // TODO Auto-generated catch block            e.printStackTrace();

        } catch (IllegalAccessException e) {

            // TODO Auto-generated catch block            e.printStackTrace();

        } catch (ClassNotFoundException e) {

            // TODO Auto-generated catch block            e.printStackTrace();

        }

        return hero;

    }

}

  

这么干就不用自己决定new什么类 反射到什么类就是什么类 如果再加新英雄也不用改动工厂  这么写的话 比原来写一大堆 好处太多了 可维护可拓展 低耦合 可重用 这就是简单工厂模式

 

 

简单工厂模式

标签:不用   决定   bsp   ack   instance   illegal   ret   技能   ring   

原文地址:https://www.cnblogs.com/wangkee/p/10195123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!