简单工厂模式
Posted wangkee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式相关的知识,希望对你有一定的参考价值。
什么是简单工厂 就相当于 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什么类 反射到什么类就是什么类 如果再加新英雄也不用改动工厂 这么写的话 比原来写一大堆 好处太多了 可维护可拓展 低耦合 可重用 这就是简单工厂模式
以上是关于简单工厂模式的主要内容,如果未能解决你的问题,请参考以下文章