public class Circle implements Shape {@Overridepublic void draw() {System.out.println("this is a circle!");}
}
public class Square implements Shape {@Overridepublic void draw() {System.out.println("this is a square!");}
}
創建類的工廠:
public class ShapeFactory {public static Shape getShape(String shape){if("circle".equals(shape)){return new Circle();}else if("square".equals(shape)){return new Square();}else{return null;}}
}
利用測試類進行測試:
public class FMMain {public static void main(String[] args) {Shape circle = ShapeFactory.getShape("circle");circle.draw();}}
抽象工廠模式:
創建過程: 5. 創建shape接口:
public interface Shape {void draw();
}
2.創建shape實現類:
public class Circle implements Shape{@Overridepublic void draw() {System.out.println("this is a Circle!");}
}
public class Rectangle implements Shape{@Overridepublic void draw() {System.out.println("this is a rectangle!");}
}
創建Color接口:
public interface Color {void fill();
}
創建Color實現類:
public class Green implements Color {@Overridepublic void fill() {System.out.println("this is Green!");}
}
public class Red implements Color{@Overridepublic void fill() {System.out.println("this is Red!");}
}
為 Color 和 Shape 對象創建抽象類來獲取工廠。
public abstract class AbstractFactory {public abstract Color getColor(String color);public abstract Shape getShape(String shape);
}
創建擴展了 AbstractFactory 的工廠類
public class ColorFactory extends AbstractFactory {@Overridepublic Color getColor(String color) {if("green".equals(color)){return new Green();}else if("red".equals(color)){return new Red();}else{return null;}}
@Overridepublic Shape getShape(String shape) {return null;}
}
public class ShapeFactory extends AbstractFactory {@Overridepublic Color getColor(String color) {return null;}
@Overridepublic Shape getShape(String shape) {if("rectangle".equals(shape)){return new Rectangle();}else if("circle".equals(shape)){return new Circle();}else{return null;}}
}
創建一個工廠生成器類
public class FactoryProducer {public static AbstractFactory getFactory(String type){if("color".equals(type)){return new ColorFactory();}else if("shape".equals(type)){return new ShapeFactory();}else{return null;}}
}
使用 FactoryProducer 來獲取 AbstractFactory,進行測試:
public class AFMain {public static void main(String[] args) {AbstractFactory color = FactoryProducer.getFactory("color");Color green = color.getColor("green");green.fill();}
}