Java设计模式——简单工厂(Simple Factory)

2017/11/20 09:56
阅读数 101

什么是简单工厂【又叫静态工厂】

由一个工厂类来创建具有相同父类的类。【漫威的英雄有一个共同点,那就是他们都有很强的作战能力(分为智力,力量,和格斗技巧等)】

 

结构类图

这里写图片描述



简单工厂【Simple Factory】

  • iHeroFactory: 专门用来调度英雄,传入名字召唤漫威英雄。
  • iHero : 定义英雄(产品)规范(都有超强的能力skill),可以使用接口或抽象类。
    public interface iHero {//用来定义英雄规范
        void skill();
    }
  • 1
  • 2
  • 3
    class SpiderMan implements iHero {
        @Override
        public void skill() {
            System.out.println("【蜘蛛侠】【智力:7】【力量:5】【格斗技巧:7】");
        }
    }

    class Thor implements iHero {
        @Override
        public void skill() {
            System.out.println("【雷神】【智力:7】【力量:7】【格斗技巧:7】");
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
    public static iHero callTheHero(String hero) {//根据不同序号来创建相同父类的子类
        switch (hero) {
            case "雷神":
                return new Thor();
            case "蜘蛛侠":
                return new SpiderMan();
        }
        throw new RuntimeException("暂无此英雄");
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

 

召唤英雄

通过上面的iHeroFactory我们可以很容易的创建相对应的英雄对象。

        iHero leiShen = iHeroFactory.callTheHero("雷神");
        leiShen.skill();

        System.out.println("\n------------------------------------\n");

        iHero zhizhu = iHeroFactory.callTheHero("蜘蛛侠");
        zhizhu.skill();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里写图片描述

 

小结

简单工厂优点

  • 工厂类有必要的逻辑判断,可以决定具体创建类,使用者免除直接创建对象的责任。

简单工厂缺点

  • 使用多重判断,比较难维护。
  • 每增加一个英雄,都要在工厂类中增加相应的创建业务的逻辑方法,违背开闭原则。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部