1、模式结构,特点:简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
-
-
Factory:工厂角色
- 工厂角色负责实现创建所有实例的内部逻辑
-
-
Product:抽象产品角色
- 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
-
-
ConcreteProduct:具体产品角色
- 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
2、uml类图
3、源码
public class FruitFactory {
/**
* 生产水果,通过不同的水果类型,生产不同的实体
* @param fruitType 水果的类型
* @return
*/
public Fruit createFruit(String fruitType) {
if("APPLE".equalsIgnoreCase(fruitType)) {
return new Apple();
} else if("BANANA".equalsIgnoreCase(fruitType)) {
return new Banana();
} else if("ORANGE".equalsIgnoreCase(fruitType)) {
return new Orange();
}
return null;
}
public static void main(String[] args) {
// 实例化一个水果工厂
FruitFactory fruitFactory = new FruitFactory();
// 得到一个苹果实例
Fruit apple = fruitFactory.createFruit("apple");
apple.type();
// 得到一个香蕉实例
Fruit banana = fruitFactory.createFruit("banana");
banana.type();
// 得到一个橘子实例
Fruit orange = fruitFactory.createFruit("orange");
orange.type();
}
}
/**
* 统一的水果接口
*/
interface Fruit {
void type();
}
/**
* 苹果
*/
class Apple implements Fruit {
public void type() {
System.out.println("苹果");
}
}
/**
* 香蕉
*/
class Banana implements Fruit {
public void type() {
System.out.println("香蕉");
}
}
/**
* 橘子
*/
class Orange implements Fruit {
public void type() {
System.out.println("橘子");
}
}
4、优点
只需要知道具体产品类所对应的参数,就可以创建具体的产品
5、缺点
需要生产的产品不易过多,不易维护,产品较多时,工厂方法代码将会非常复杂。