什么是简单工厂【又叫静态工厂】
由一个工厂类来创建具有相同父类的类。【漫威的英雄有一个共同点,那就是他们都有很强的作战能力(分为智力,力量,和格斗技巧等)】
结构类图
简单工厂【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
小结
简单工厂优点
- 工厂类有必要的逻辑判断,可以决定具体创建类,使用者免除直接创建对象的责任。
简单工厂缺点
- 使用多重判断,比较难维护。
- 每增加一个英雄,都要在工厂类中增加相应的创建业务的逻辑方法,违背开闭原则。