抽象工厂使用场景:
QQ换皮肤一整套一起换
1)创建形状接口和颜色接口 和实现该接口的实现类
接口
/** * 定义一个颜色接口 * @author Administrator */ public interface Color { //装满 void fill(); }
/** * 定义形状接口 * @author Administrator * */ public interface Shape { void draw(); }
实现类
/** * 定义一个三角形实例实现形状接口 * @author Administrator * */ public class Triangle implements Shape { @Override public void draw() { System.out.println("我要化一个三角形"); } }
import cn.ac.bcc.factory.Shape; /** * 定义一个圆形实例实现形状接口 * @author Administrator * */ public class Circle implements Shape { @Override public void draw() { // TODO Auto-generated method stub System.out.println("我画一个圆形"); } }
public class Red implements Color{ @Override public void fill() { // TODO Auto-generated method stub System.out.println("我是红色"); } }
import cn.ac.bcc.factory.Color; public class Green implements Color { @Override public void fill() { // TODO Auto-generated method stub System.out.println("我是绿色"); } }
2)创建抽象工厂并声明两个方法 形状工厂的方法和颜色工厂的方法
/** * 定义抽象工厂类 * @author Administrator * */ public abstract class Factory { //声明两个工厂类方法 public abstract Shape getShape(String shapeType); public abstract Color getColor(String colorType); }
3)实现形状工厂和颜色工厂 工厂内部实现创建形状和颜色的实例方法
package cn.ac.bcc.factory; import cn.ac.bcc.factory.impl.Blue; import cn.ac.bcc.factory.impl.Green; import cn.ac.bcc.factory.impl.Red; public class ColorFactory extends Factory{ @Override public Shape getShape(String shapeType) { // TODO Auto-generated method stub return null; } @Override public Color getColor(String colorType) { // TODO Auto-generated method stub if(colorType==null){ return null; } if(colorType.equals("red")){ return new Red(); } if(colorType.equals("green")){ return new Green(); } if(colorType.equals("blue")){ return new Blue(); } return null; } }
package cn.ac.bcc.factory; import cn.ac.bcc.factory.impl.Circle; import cn.ac.bcc.factory.impl.Square; import cn.ac.bcc.factory.impl.Triangle; /** * 定义一个形状工厂 * @author Administrator * */ public class ShapeFactory extends Factory{ /** * 获取形状方法 * @param shapeType 要获得的形状名称 * @return */ public Shape getShape(String shapeType){ if(shapeType == null){ return null; } if(shapeType.equals("circle")){ return new Circle(); } if(shapeType.equals("triangle")){ return new Triangle(); } if(shapeType.equals("square")){ return new Square(); } return null; } @Override public Color getColor(String colorType) { // TODO Auto-generated method stub return null; } }
4)创建一个工厂创造器 用来创建工厂实例
public class FactoryProvider { public static Factory getAbstractFactory(String factoryName){ if(factoryName.equals("shape")){ return new ShapeFactory(); } if(factoryName.equals("color")){ return new ColorFactory(); } return null; } }
5)测试实现
import cn.ac.bcc.factory.Color; import cn.ac.bcc.factory.Factory; import cn.ac.bcc.factory.FactoryProvider; import cn.ac.bcc.factory.Shape; public class FactoryTest { public static void main(String[] args) { //通过工厂提供类获取相应的工厂类 Factory shapeFactory = FactoryProvider.getAbstractFactory("shape"); //通过形状工厂类获取指定的形状 Shape shape = shapeFactory.getShape("circle"); shape.draw(); Factory colorFactory = FactoryProvider.getAbstractFactory("color"); Color color = colorFactory.getColor("red"); color.fill(); } }