概念:工厂模式负责将大量有共同接口的类实例化,工厂模式可以动态决定将哪个类实例化。
种类:简单工厂(Simple Factory)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)。
简单工厂(Simple Factory)模式:
简单工厂模式是类的创建模式,又叫做静态工厂方法模式,简单工厂模式是由一个工厂对象决定创建 出哪种产品类的实例。
一个图形的实例:
interface Shape:
package org.xueji.pattern.simplefactory;
/**
* @author xueji
*/
public interface Shape {
void draw() throws Exception;
void erase() throws Exception;
}
Circle implements Shape:
package org.xueji.pattern.simplefactory;
import org.xueji.pattern.simplefactory.Shape;
public class Circle implements Shape {
@Override
public void draw() throws Exception {
System.out.println("Circle draw");
}
@Override
public void erase() throws Exception {
System.out.println("Circle erase");
}
}
Square implements Shape
package org.xueji.pattern.simplefactory; import org.xueji.pattern.simplefactory.Shape; public class Square implements Shape { @Override public void draw() throws Exception { System.out.println("square draw"); } @Override public void erase() throws Exception { System.out.println("square erase"); } }
Triangle implements Shape:
package org.xueji.pattern.simplefactory; import org.xueji.pattern.simplefactory.Shape; public class Triangle implements Shape { @Override public void draw() throws Exception { System.out.println("Triangle draw"); } @Override public void erase() throws Exception { System.out.println("Triangle erase"); } }
SimpleFactory:
package org.xueji.pattern.simplefactory; /** * 简单工厂 * @author xueji */ public class SimpleFactory { public static Shape newInstance(String type) throws Exception{ if("circle".equalsIgnoreCase(type)){ return new Circle(); }else if("square".equalsIgnoreCase(type)){ return new Square(); }else if("triangle".equalsIgnoreCase(type)){ return new Triangle(); }else{ throw new HelloException(); } } }
Client:
package org.xueji.pattern.simplefactory; /** * 简单工厂测试 * @author xueji */ public class Client { public static void main(String[] args) throws Exception { Shape circle = SimpleFactory.newInstance("Square"); circle.draw(); } }
result:
square draw