flutter

抽象工厂模式理解

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
上一篇 下一篇

猜你喜欢

热点阅读