/** * 工厂模式是一种创建模式,因为此模式提供了更好的方法来创建对象。 * 在此模式中,我们创建对象而不将创建逻辑暴露给客户端。 * 例子-如何使用工厂模式创建对象 * 由工厂模式创建的对象将是形状对象,如圆形、矩形。 * @author ruis * */ /** * 设计一个接口来表示Shape * @author ruis * */ public interface Shape { //接口方法:画图的方法 void draw(); } |
/** * 创建实现接口的具体类 矩形类 * @author ruis * */ public class Rectangle implements Shape {
@Override public void draw() { //包含一个画矩形的方法 System.out.println("Inside Rectangle::draw()method."); }
}
|
/** * 创建实现接口的具体类的方法 圆形类 * @author ruis * */ public class Circle implements Shape {
@Override public void draw() { // 创建一个画圆形的方法 System.out.println("Inside Circle::draw() method."); }
}
|
/** * 创建实现接口的具体类 正方形类 * @author ruis * */ public class Square implements Shape {
@Override public void draw() { // 一个画正方形的方法 System.out.println("Inside Square::draw()method."); }
}
|
/** * 核心工厂模式是一个Factory类。 * 以下代码显示了如何为Shape对象创建Factory类。 * ShapeFactory类基于传递给getShape()方法的String值创建Shape对象。 * 如果String值为CIRCLE,它将创建一个Circle对象。 * @author ruis * */ /** * 如果形状为null,返回null; * 如果是矩形,创建矩形; * 如果是圆形,创建圆形; * 如果是方形,创建方形。 * @author ruis * */ public class ShapeFactory {
//use getShape method to get object of type shape public Shape getShape(String shapeType){ if(shapeType==null){ return null; } if(shapeType.equalsIgnoreCase("CIRCLE")){ return new Circle(); }else if(shapeType.equalsIgnoreCase("RECTANGLE")){ return new Rectangle(); }else if(shapeType.equalsIgnoreCase("SQUARE")){ return new Square(); } return null; } }
|
/** * 使用Factory类通过传递类型等信息来获取具体类的对象 * 创建形状工厂对象,获得工厂可以创建的形状。 * .get()方法 * @author ruis * */ public class Main {
public static void main(String[] args){ ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw(); Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw(); Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw(); /* Inside Circle::draw() method. Inside Rectangle::draw()method. Inside Square::draw()method. */ } }
|