什么是简单工厂模式
简单工厂模式是属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂的实现
先创建两个类
public class Kai {
public void move(){
System.out.println("铠在赶往上路");
}
}
public class Houyi {
public void move(){
System.out.println("后裔在赶往下路!");
}
}
从这两个人物中可以发现,他们都是英雄,都有同一个方法,所以我们可以抽象出一个接口。
建立一个接口,让houyi和kai实现这个接口。
public interface Hero {
public void move();
}
建一个测试类
public class Main {
public static void main(String[] args){
//实例化英雄
/* Houyi houyi = new Houyi();
Kai kai = new Kai();
houyi.move();
kai.move();*/
//实例化英雄,这里用到了多态
Hero houyi = new Houyi();
Hero kai = new Kai();
houyi.move();
kai.move();
}
}
回想下简单工厂模式的定义通过专门定义一个类来负责创建其他类的实例,那么就需要我们创建一个HeroFactory类,在这个类里面我们可以封装一个方法,专门用来创建其他类的实例。
public class HeroFactory {
/**
* 获取后裔实例
*/
public static Hero getHouyi(){
return new Houyi();
}
/**
* 获取铠实例
*/
public static Hero getKai(){
return new Kai();
}
}
当我们有了工厂之后,我们就可以直接使用工厂获取实例,这就是一个简单工厂的实现了
Hero houyi = HeroFactory.getHouyi();
Hero kai = HeroFactory.getKai();
houyi.move();
kai.move();
简单工厂模式中包含的角色及其职责
- 工厂角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需要的产品对象。 - 抽象角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 - 具体产品角色
简单工厂模式所创建的具体实例对象
优化简单工厂
在HeroFactory中两个get方法可以合并成一个get方法,只需要传入一个参数就可以随意创建所需要的实例对象。
public static Hero getHero(String type){
switch (type){
case "houyi" :
return new Houyi();
case "kai" :
return new Kai();
default:
System.out.println("找不到该英雄!");
return null;
}
}
调用getHero方法就可以获得所需的对象。
Hero houyi = HeroFactory.getHero("houyi");
Hero kai = HeroFactory.getHero("kai");
houyi.move();
kai.move();
简单工厂模式的优缺点
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何 创建以及如何组织的。有利于整个软件体系结构的优化。
简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做得并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。