抽象工厂模式的目的是提供一个创建一系列相关或者相互依赖的对象的接口,而无需指定他们具体的类。
代码实现:
为形状创建一个接口:
public interface Shape { void draw(); }
创建Shape接口的实现类:
public class Rectangle implements Shape{ @Override public void draw() { System.out.println("Shape:Rectangle"); } }
public class Circle implements Shape{ @Override public void draw() { System.out.println("Shape:Circle"); } }
为颜色创建一个接口:
public interface Color { void fill(); }
创建Color的实现类:
public class Red implements Color{ public void fill() { System.out.println("Color:Red"); } }
public class Green implements Color{ public void fill() { System.out.println("Color:Green"); } }
为Shape和Color创建抽象类工厂来获取对象
public abstract class AbstractFactory { public abstract Shape getShape(String shape); public abstract Color getColor(String color); }
创建实现了AbstractFactory的工厂类,来获取Shap和Color对象
public class ShapeFactory extends AbstractFactory{ @Override public Shape getShape(String shapeType) { if(shapeType == null){ return null; } if(shapeType.equals("rectangle")){ return new Rectangle(); }else if(shapeType.equals("circle")){ return new Circle(); } return null; } @Override public Color getColor(String colorType) { return null; } }
public class ColorFactory extends AbstractFactory{ @Override public Shape getShape(String shapeType) { return null; } @Override public Color getColor(String colorType) { if(colorType==null){ return null; } if(colorType.equals("red")){ return new Red(); }else if(colorType.equals("green")){ return new Green(); } return null; } }
创建工厂生成器类,来获取ColorFactory和ShapeFactory:
public class FactoryProducer { public static AbstractFactory getFactory(String choice){ if(choice.equals("color")){ return new ColorFactory(); }else if(choice.equals("shape")){ return new ShapeFactory(); } return null; } }
运行客户端代码:
public class ClientDemo { public static void main(String[] args) { //获取形状工厂 ShapeFactory shapeFactory = (ShapeFactory) FactoryProducer.getFactory("shape"); Shape shape = shapeFactory.getShape("circle"); shape.draw(); //获取颜色工厂 ColorFactory colorFactory = (ColorFactory) FactoryProducer.getFactory("color"); Color color = colorFactory.getColor("red"); color.fill(); } }
运行结果:
Shape:Circle
Color:Red