简单工厂模式就是一个工厂类根据传入的参量决定创建出哪一种产品类的实例。
简单工厂模式涉及到工厂角色,抽象产品角色以及具体产品角色等三个角色:
1。工厂类角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,他往往由一个具体的JAVA类实现。
2。抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或他们共同拥有的接口。抽象产品角色可以用一个JAVA接口或JAVA抽象实现。
3。具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例。
代码:产品接口类(水果)
package 工厂模式.简单工厂模式;
public interface Fruit {
void grow();
void harvest();
void plant();
}
产品类:
Apple:(苹果)
package 工厂模式.简单工厂模式;
public class Apple implements Fruit {
public void grow() {
System.out.println("apple grow");
}
public void harvest() {
System.out.println("apple harvest");
}
public void plant() {
System.out.println("apple plant");
}
}
Banana:(香蕉)
package 工厂模式.简单工厂模式;
public class Banana implements Fruit {
public void grow() {
System.out.println("Banana grow");
}
public void harvest() {
System.out.println("Banana harvest");
}
public void plant() {
System.out.println("Banana plant");
}
}
工厂类:(农夫)
package 工厂模式.简单工厂模式;
public class FruitGardener {
public static Fruit factory(String fruit)
{
if("apple".equals(fruit))
{
return new Apple();
}
if("banana".equals(fruit))
{
return new Banana();
}
else
{
return null;
}
}
}
客户端:
package 工厂模式.简单工厂模式;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
Apple apple = (Apple) FruitGardener.factory("apple");
apple.plant();
}
}
简单工厂模式的优缺点:
这个工厂类农夫集中了所有产品的逻辑,形成了一个无所不能的全能类,这个农夫必须对所有的水果负责,如果这个农夫什么时候工作出现了异常,那么整个生产环境都要造成影响。
将这么多逻辑集中放在一个类里面的另外一个缺点是:当产品类有不同的接口时,农夫将对新的产品进行判断,那么就必须要更改农夫这个类,对于扩展是很不方便的。所以下面介绍工厂方法。