1、简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2、角色与职责
2.1 工厂角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。2.2 抽象角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所有共有的公共的接口。2.3 具体产品
简单工厂模式所创建的具体实例对象。
3、示意图
示意图如下,上面是一个动物类的接口,下面是动物类的对象。类对象要实现动物类接口:
4、代码示例
首先创建一个动物的接口类,然后创建一个猫类和一个狗类继承它:
/**
* 动物的接口类
*
* @author Administrator
*
*/
public interface Animal {
/**
* 将笑话的方法
*/
public void joke();
}
猫的实例类和狗的实例类
/**
* 猫
* @author Administrator
*
*/
public class Cat implements Animal {
@Override
public void joke() {
// TODO Auto-generated method stub
System.out.println("猫咪猫咪");
}
}
/**
* 狗
*
* @author Administrator
*
*/
public class Dog implements Animal {
@Override
public void joke() {
// TODO Auto-generated method stub
System.out.println("汪汪汪汪");
}
}
这里创建一个产生动物的工厂类:
/**
* 动物的工厂类
*
* @author Administrator
*
*/
public class AnimalFactory {
/**
* 获得猫这个实例
*
* @return
*/
public static Cat getCat() {
return new Cat();
}
/**
* 获得狗这个实例
*
* @return
*/
public static Dog getDog() {
return new Dog();
}
/**
* 获得一个动物的实例类
*
* @return
*/
public static Animal getAnimal(String type) {
try {
Class animal = Class.forName(type);
return (Animal) animal.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
5、总结优缺点
优点:在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪些具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
缺点:不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做得并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性不是很好。
6、实际应用
在javaweb的应用中,最常用的场景就是jdbc,我们上面有一个示例图,就是按照这个画出来的。