存在Shape,Color兩個(gè)工廠
這兩個(gè)工廠又繼承抽象類AbstractFactory。
自上而下
先創(chuàng)建頂層抽象工廠:AbstractFactory.java,有兩個(gè)抽象方法,傳一個(gè)String參數(shù),返回Shap/Color對象
public abstract class AbstractFactory {
abstract Shape getShape(String shape);
abstract Color getColor(String color);
}
然后創(chuàng)建ShapeFactory.java和ColorFactory.java,繼承AbstractFactory.java。根據(jù)不同的傳參返回不同的Shape/Color。
public class ShapeFactory extends AbstractFactory {
@Override
Shape getShape(String shape) {
switch (shape){
case "Circle":{
return new Circle();
}
case "Square":{
return new Square();
}
}
return null;
}
@Override
Color getColor(String color) {
return null;
}
}
public class ColorFactoyr extends AbstractFactory {
@Override
Shape getShape(String shape) {
return null;
}
@Override
Color getColor(String color) {
switch (color){
case "Red":{
return new Red();
}
case "Green":{
return new Green();
}
}
return null;
}
}
創(chuàng)建兩個(gè)接口Shape.java和Color.java,給Shape接口一個(gè)draw()方法,給Color接口一個(gè)fill()方法
public interface Shape {
void draw();
}
public interface Color {
void fill();
}
創(chuàng)建Shape和Color的實(shí)現(xiàn)類
public class Square implements Shape {
@Override
public void draw() {
System.out.println("drawing square...");
}
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("drawing circle....");
}
}
-------------------------------------------------------------------
public class Green implements Color{
@Override
public void fill() {
System.out.println("filling green...");
}
}
public class Red implements Color{
@Override
public void fill() {
System.out.println("filling red...");
}
}
這樣就完成了抽象工廠模式,就是有一個(gè)抽象類用來生成工廠類,最后寫一個(gè)測試方法驗(yàn)證下
public class AbstractFactoryTest {
public static void main(String[] args) {
AbstractFactory shapeFactory = new ShapeFactory();
Shape shape = shapeFactory.getShape("Circle");
shape.draw();
AbstractFactory colorFactory = new ColorFactoyr();
Color color = colorFactory.getColor("Red");
color.fill();
}
}