
1、Shape.java
package com.ssm.cts.pattern.abstractfactory;
public interface Shape {
void draw();
}
2、Circle.java
package com.ssm.cts.pattern.abstractfactory;
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("圆形");
}
}
3、Square.java
package com.ssm.cts.pattern.abstractfactory;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("方形");
}
}
4、Color.java
package com.ssm.cts.pattern.abstractfactory;
public interface Color {
void fill();
}
5、Green.java
package com.ssm.cts.pattern.abstractfactory;
public class Green implements Color {
@Override
public void fill() {
System.out.println("绿色");
}
}
6、Red.java
package com.ssm.cts.pattern.abstractfactory;
public class Red implements Color {
@Override
public void fill() {
System.out.println("红色");
}
}
7、AbstractFactory.java
package com.ssm.cts.pattern.abstractfactory;
public abstract class AbstractFactory {
public abstract Color getColor(String color);
public abstract Shape getShape(String shape);
}
8、ColorFactory.java
package com.ssm.cts.pattern.abstractfactory;
public class ColorFactory extends AbstractFactory {
@Override
public Color getColor(String color) {
if (color == null) {
return null;
}
if (color.equalsIgnoreCase("RED")) {
return new Red();
} else if (color.equalsIgnoreCase("GREEN")) {
return new Green();
}
return null;
}
@Override
public Shape getShape(String shape) {
// TODO Auto-generated method stub
return null;
}
}
9、ShapeFactory.java
package com.ssm.cts.pattern.abstractfactory;
public class ShapeFactory extends AbstractFactory {
@Override
public Color getColor(String color) {
// TODO Auto-generated method stub
return null;
}
@Override
public Shape getShape(String shape) {
if (shape == null) {
return null;
}
if (shape.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shape.equalsIgnoreCase("SQUARE")) {
return new Square();
}
return null;
}
}
10、FactoryProducer.java
package com.ssm.cts.pattern.abstractfactory;
public class FactoryProducer {
public static AbstractFactory getFactory(String choice) {
if (choice.equalsIgnoreCase("SHAPE")) {
return new ShapeFactory();
} else if (choice.equalsIgnoreCase("COLOR")) {
return new ColorFactory();
}
return null;
}
}
11、Demo.java
package com.ssm.cts.pattern.abstractfactory;
public class Demo {
// 测试
public static void main(String[] args) {
// 获取形状工厂
AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");
// 获取形状为 Circle的对象
Shape shape1 = shapeFactory.getShape("CIRCLE");
// 调用 Circle的 draw方法
shape1.draw();
// 获取颜色工厂
AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");
// 获取颜色为 Red的对象
Color color1 = colorFactory.getColor("RED");
// 调用Red的 fill方法
color1.fill();
}
}