• 简单工厂模式


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

     

  • 相关阅读:
    二.线性表
    一.绪论
    托管服务器代码
    jquery easyui DataGrid 数据表格 属性
    用socket 模拟http请求
    struct和class的相同点与不同点
    c++中的基本数据类型
    当函数返回一个局部变量的指针问题,内存是否被释放
    Python首先生成包含1000个随机字符的字符串,然后统计每个字符的出现次数。(使用字典)
    浅谈结构体字节的求法
  • 原文地址:https://www.cnblogs.com/wangkee/p/10195123.html
Copyright © 2020-2023  润新知