1 什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通常是专门定义一个类来创建其它类的实例,被创建的实例通常都具有相同的父类。
2 模式中的角色
- 工厂角色
简单工厂模式的核心,主要负责创建实体类的内部逻辑。工厂类可以直接被外界调用,创建所需要的实例。
- 抽象角色
简单工厂模式所实例化的对象的公共父类。
- 具体产品角色
简单工厂模式所创建的实例对象。
3 几种实现方法
3.1 原始方法
- 先创建接口和其实现类
接口:Fruit.class
public interface Fruit {
void eat();
}
实现类:Apple.class /Banna.class
public class Apple implements Fruit{
@Override
public void eat() {
System.out.println("吃苹果");
}
}
public class Banana implements Fruit{
@Override
public void eat() {
System.out.println("吃香蕉");
}
}
工厂类:SimpleFactory.class
public class SimpleFactory {
public static Fruit getApple(){
return new Apple();
}
public static Fruit getBanana(){
return new Banana();
}
}
测试类:SimpleFactoryTest.class
public class SImpleFactoryTest {
public static void main(String[] args) {
Fruit apple = SimpleFactory.getApple();
Fruit banana = SimpleFactory.getBanana();
apple.eat();
banana.eat();
}
}
缺陷:当有新的实现类时都需要在工厂类添加添加一个方法。
3.2 改进
将工厂类进行改进.
工厂类:SimpleFactory.class
public class SimpleFactory {
public static Fruit getFruit(String className){
if("apple".equalsIgnoreCase(className)){
return new Apple();
}else if("banana".equalsIgnoreCase(className)){
return new Banana();
}else{
return null;
}
}
}
测试类:SimpleFactoryTest.class
public class SImpleFactoryTest {
public static void main(String[] args) {
Fruit apple = SimpleFactory.getApple("apple");
Fruit banana = SimpleFactory.getBanana("banana");
apple.eat();
banana.eat();
}
}
改进模式依然存在缺陷,在有新的实现类时,虽然不需要重新添加方法,但还是要在方法中添加代码。我们想要的是编写一次工厂类后就不再改动。
3.3 使用反射机制再次改进
工厂类:SimpleFactory.class
public class SimpleFactory {
public static Fruit getFruit(Class<?> className){
try {
return (Fruit) className.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
测试类:SimpleFactoryTest.class
public class SImpleFactoryTest {
public static void main(String[] args) {
Fruit apple = SimpleFactory.getApple(Apple.class);
Fruit banana = SimpleFactory.getBanana(Banana.class);
apple.eat();
banana.eat();
}
}
下一篇:工厂方法模式