简单工厂模式(Simple Factory模式):
(1)又称为Static Factory Method 静态工厂方法
(2)Intent:由一个工厂对象决定创建出哪一种产品类的实例
(3)Motivation :负责将大量有共同接口的类实例化
简单工厂模式是类的创建模式。是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现。
看下面一个简单的代码实例:
虚类:Animal.java 代码如下:
public interface Animal {
public void create();
public void grow();
}
接下来三个类分别实现了Animla.java 类,代码如下:
public class Tiger implements Animal{
private static final String AnimalName="Tiger";
@Override
public void create() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" creates");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" grows");
}
public void run(){
System.out.println(AnimalName+" runs");
}
}
public class Dolphin implements Animal{
private static final String AnimalName="Dolphin";
@Override
public void create() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" creates");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" grows");
}
public void swim(){
System.out.println(AnimalName+"swim");
}
}
public class Parrot implements Animal{
private static final String AnimalName="Parrot";
@Override
public void create() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" creates");
}
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println(AnimalName+" grows");
}
public void fly(){
System.out.println(AnimalName+" runs");
}
}
用于构建这些Animal的工厂类:
public class AnimalSimpleFactory {
public static Animal createAnimal(String animalName){
if("tiger".equals(animalName)){
return new Tiger();
}else if("dolphin".equals(animalName)){
return new Dolphin();
}else if("parrot".equals(animalName)){
return new Parrot();
}else
return null;
}
}
客户端类:
public class Client {
public static void main(String[] args){
Animal animal =AnimalSimpleFactory.createAnimal("tiger");
animal.create();
animal =AnimalSimpleFactory.createAnimal("dolphin");
animal.create();
animal =AnimalSimpleFactory.createAnimal("parrot");
animal.create();
}
}
AnimalFactory 提供工厂方法,在客户端的调用下,该方法创建客户所需的水果对象。
简单工厂模式是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及工厂角色、抽象产品角色以及具体产品的三个角色,大体结构为:
(大致图形,可能会有错误,欢饮批评指正)
在简单工厂模式中,可以根据参数的不同返回不同的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。
当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。
实际上就是系统划分为三个子系统:产品的消费者角色(Client)、产品的工厂角色(Factory)和产品角色(Product
)。
在一定程度上符合“开-闭”原则,允许当新的产品加入系统时,无需对现有代码进行修改。这一点在消费者角色时成立,而对于工厂角色不成立。
简单工厂模式是下了对责任的分割,模式的核心是工厂类,该类中含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品的责任,而不仅仅负责“消费”产品。
适用环境:
(1)工厂类服装创建的对象比较少:由于创建的对象比较少,不会造成工厂方法中的业务逻辑太复杂。
(2)客户端只知道传入工厂类的参数,对于如何创建对象不关心:客户端既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型对应的参数。