zoukankan      html  css  js  c++  java
  • 简单工厂模式

    什么是简单工厂 就相当于 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什么类 反射到什么类就是什么类 如果再加新英雄也不用改动工厂  这么写的话 比原来写一大堆 好处太多了 可维护可拓展 低耦合 可重用 这就是简单工厂模式

     

  • 相关阅读:
    configuring tortoise git and vs code.
    introcuding less css with less.js, using webcompiler ext
    CSS3 auto revolution practitioner!
    我与 美国作家 21天精通C++ 作者 Rao的对话:
    AngularJs Test demo &front end MVVM implementation conjecture and argue.
    GreenPlum完全安装_GP5.11.3完整安装
    hdfs文件写入kafka集群
    Greenplum主备节点切换
    Greenplum客户端访问控制
    Greenplum+mybatis问题解析
  • 原文地址:https://www.cnblogs.com/wangkee/p/10195123.html
Copyright © 2011-2022 走看看