简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,这模式又称为静态工厂模式,属于类的创建型模式,简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例,通常,返回的类都有一个公共的父类和公共的方法。
1、意图提供一个类,负责根据一定的条件创建某一具体类的实例。
2、角色及其责任2.1 工厂角色(Creator):是工厂模式的核心,负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。
2.2 抽象角色(Product):是简单工厂模式所创建的所有对象的父类,负责描述所有实例所共有的公共接口。
2.3 具体产品角色(Concrete Product):是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。一般来讲,他是抽象产品类的子类,实现了抽象产品中定义的所有接口方法。
例子:
package com.ag.text;
public class SimpleFactory {
public static void main(String[] args) {
FruitFactory fruitFactory = new FruitFactory();
Fruit apple = fruitFactory.getFruit("apple");
Fruit banana = fruitFactory.getFruit("banana");
System.out.println(apple.color());
System.out.println(banana.color());
}
}
//Product
interface Fruit{
String color();
}
//Concrete Product
class Apple implements Fruit{
public String color() {
return "red";
}
}
//Concrete Product
class Banana implements Fruit{
public String color() {
return "yellow";
}
}
//Creator
class FruitFactory{
public Fruit getFruit(String name){
if (name.equalsIgnoreCase("apple")){
return new Apple();
}else if (name.equalsIgnoreCase("banana")){
return new Banana();
}
return null;
}
}
3、简单工厂模式的特点
3.1 其优点在于,简单工厂模式包含必要的判断逻辑,能够根据外界给定的信息决定酒精应该创建哪个具体类的对象。用户使用时,可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的,有利于整个软件体系结构的优化。
3.2 其缺点在于,体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做得并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不好。当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变就是该模式的缺点。



