单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。
1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建全部实例的内部逻辑。工厂类能够被外界直接调用。创建所需的产品对象。
2.抽象(Product)角色 简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口。
3.详细产品(Concrete Product)角色 简单工厂模式所创建的详细实例对象
优缺点:
在这个模式中。工厂类是整个模式的关键所在。它包括必要的推断
逻辑,能够依据外界给定的信息,决定到底应该创建哪个详细类的
对象。
用户在使用时能够直接依据工厂类去创建所需的实例,而无
需了解这些对象是怎样创建以及怎样组织的。有利于整个软件体系
结构的优化。
不难发现,简单工厂模式的缺点也正体如今其工厂类上,因为工厂类集中
了全部实例的创建逻辑。所以“高内聚”方面做的并不好。另外,当系统中的
详细产品类不断增多时,可能会出现要求工厂类也要做对应的改动,扩展
性并不非常好。
public class Apple implements Fruit{
/*
* 採集
*/
public void get(){
System.out.println("採集苹果");
}
}
public class Banana implements Fruit{
public void get(){
System.out.println("採集香蕉");
}
public class FruitFactory {
// /*
// * 获得Apple类的实例
// */
// public static Fruit getApple() {
// return new Apple();
// }
//
// /*
// * 获得Banana类实例
// */
// public static Fruit getBanana() {
// return new Banana();
// }
/*
* get方法,获得全部产品对象
*/
public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// if(type.equalsIgnoreCase("apple")) {
// return Apple.class.newInstance();
//
// } else if(type.equalsIgnoreCase("banana")) {
// return Banana.class.newInstance();
// } else {
// System.out.println("找不到对应的实例化类");
// return null;
// }
Class fruit = Class.forName(type);
return (Fruit) fruit.newInstance();
}
}
}
public interface Fruit {
/*
* 採集
*/
public void get();
}
public class MainClass {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// //实例化一个Apple
// Apple apple = new Apple();
// //实例化一个Banana
// Banana banana = new Banana();
//
// apple.get();
// banana.get();
// //实例化一个Apple,用到了多态
// Fruit apple = new Apple();
// Fruit banana = new Banana();
// apple.get();
// banana.get();
// //实例化一个Apple
// Fruit apple = FruitFactory.getApple();
// Fruit banana = FruitFactory.getBanana();
// apple.get();
// banana.get();
Fruit apple = FruitFactory.getFruit("Apple");
Fruit banana = FruitFactory.getFruit("Banana");
apple.get();
banana.get();
}
}