设计模式之—工厂模式
工厂模式:
创建过程:
- 创建Shape接口
public interface Shape {void draw();
}
- 创建实现类:
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();}
}