抽象工厂模式理解
2021-09-02 本文已影响0人
卢融霜
// 创建形状接口
abstract class IShape {
void draw();
}
//实现形状接口 的实体类
class Rectangle implements IShape {
@override
void draw() {
print("draw rectangle");
}
}
class Circle implements IShape {
@override
void draw() {
print("draw circle");
}
}
class Triangle implements IShape {
@override
void draw() {
print("draw triangle");
}
}
//创建颜色接口
abstract class IColor {
void fill();
}
//实现颜色接口 的实体
class Red implements IColor {
@override
void fill() {
print("this color is Red");
}
}
class Green implements IColor {
@override
void fill() {
print("this color is Green");
}
}
class Yellow implements IColor {
@override
void fill() {
print("this color is Yellow");
}
}
//为 颜色和 形状 对象 创建抽象类来获取工厂
enum ColorType { Red, Green, Yellow }
enum ShapeType { Rectangle, Circle, Triangle }
abstract class IFactory {
IShape getShape(ShapeType type);
IColor getColor(ColorType type);
}
//根据类型生成实体 工厂
class FactoryProducer {
static IFactory createFactory(FType type) {
switch (type) {
case FType.Color:
return _ColorFactory();
case FType.Shape:
return _ShapeFactory();
default:
return _ColorFactory();
}
}
}
//根据类型获取 颜色实体
class _ColorFactory implements IFactory {
@override
IColor getColor(ColorType type) {
switch (type) {
case ColorType.Green:
return Green();
case ColorType.Yellow:
return Yellow();
case ColorType.Red:
return Red();
default:
return Red();
}
}
@override
IShape getShape(ShapeType type) {
return null;
}
}
//根据类型获取形状实体
class _ShapeFactory implements IFactory {
@override
IColor getColor(ColorType type) {
return null;
}
@override
IShape getShape(ShapeType type) {
switch (type) {
case ShapeType.Circle:
return Circle();
case ShapeType.Rectangle:
return Rectangle();
case ShapeType.Triangle:
return Triangle();
default:
return Circle();
}
}
}
//应用
IFactory colorFactory =
FactoryProducer.createFactory(FType.Color);
IColor color = colorFactory.getColor(ColorType.Yellow);
color.fill();
//创建形状的工厂实例
IFactory shapeFactory =
FactoryProducer.createFactory(FType.Shape);
IShape shape = shapeFactory.getShape(ShapeType.Triangle);
shape.draw();
//log
I/flutter ( 1333): this color is Yellow
I/flutter ( 1333): draw triangle