美文网首页
创建型之抽象工厂模式

创建型之抽象工厂模式

作者: FisherTige_f2ef | 来源:发表于2020-12-16 20:58 被阅读0次

    抽象工厂模式(Abstract Factory Pattern)

    可以理解为创建工厂的工厂,即抽象工厂创建工厂方法的实例。

    优缺点:具有工厂方法的所有优点及缺点,只是相对于工厂方法,而不再是具体的产品类。

    实现步骤:

    1、为形状创建一个接口Color

    public interface Shape {

     void draw();

    }

    2、创建实现形状接口的实体类

    //画矩形

    public class Rectangle implements Shape { 

          @Override  public void draw() { 

                 System.out.println("Inside Rectangle::draw() method.");

           }

    }

    //画圆形

    public class Circle implements Shape {

          @Override  public void draw() { 

                  System.out.println("Inside Circle::draw() method.");

          }

    }

    3、为填充颜色创建一个接口 Shape 

    public interface Color {

         void fill();

    }

    4、创建实现填充颜色接口的实体类

    //填充红色

    public class Red implements Color {

           @Override

          public void fill() {

              System.out.println("Inside Red::fill() method.");

          }

    }

    //填充绿色

    public class Green implements Color {

          @Override

          public void fill() {

              System.out.println("Inside Green::fill() method.");

           }

    }

    5、为 Color 和 Shape 对象创建抽象类来获取工厂

    public abstract class AbstractFactory {

             public abstract Color getColor(String color);

             public abstract Shape getShape(String shape) ;

    }

    6、创建扩展了 AbstractFactory 的工厂类,基于给定的名称生成实体类的对象

    public class ShapeFactory extends AbstractFactory {

           @Override

          public Shape getShape(String shapeType){

                     if(shapeType == null){ 

                               return null;

                      }       

                     if(shapeType.equalsIgnoreCase("CIRCLE")){

                               return new Circle();

                     } else if(shapeType.equalsIgnoreCase("RECTANGLE")){ 

                               return new Rectangle();

                     } else if(shapeType.equalsIgnoreCase("SQUARE")){

                                return new Square();

                      }      return null;

          } 

          @Override

          public Color getColor(String color) {

                       return null;

          }

    }

    public class ColorFactory extends AbstractFactory {

             @Override 

             public Shape getShape(String shapeType){

                      return null;

              } 

          @Override 

           public Color getColor(String color) {

                      if(color == null){ 

                          return null;

                       }       

                      if(color.equalsIgnoreCase("RED")){

                              return new Red();

                      } else if(color.equalsIgnoreCase("GREEN")){ 

                                return new Green();

                      } 

                      return null;

        }    

    }

    7、创建一个工厂创造器/生成器类,通过传递形状或颜色的类型名称来获取工厂

    public class FactoryProducer {

         public static AbstractFactory getFactory(String choice){

                 if(choice.equalsIgnoreCase("SHAPE")){

                         return new ShapeFactory();

                 } else if(choice.equalsIgnoreCase("COLOR")){

                        return new ColorFactory();

                  } 

                 return null;

        }

    }

    8、使用 FactoryProducer 来获取 AbstractFactory,通过传递类型信息来获取实体类的对象

    public class AbstractFactoryPatternDemo {

             public static void main(String[] args) {

                  //获取形状工厂

                  AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");

                  //获取形状为 Circle 的对象

                  Shape shape1 = shapeFactory.getShape("CIRCLE");

                  //调用 Circle 的 draw 方法

                  shape1.draw();

                  //获取形状为 Rectangle 的对象 

                 Shape shape2 = shapeFactory.getShape("RECTANGLE");

                  //调用 Rectangle 的 draw 方法

                  shape2.draw();

                  //获取颜色工厂

                  AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

                  //获取颜色为 Red 的对象

                  Color color1 = colorFactory.getColor("RED");

                  //调用 Red 的 fill 方法

                  color1.fill();

                  //获取颜色为 Green 的对象

                  Color color2 = colorFactory.getColor("Green");

                  //调用 Green 的 fill 方法 

                 color2.fill();

           }

    }

    相关文章

      网友评论

          本文标题:创建型之抽象工厂模式

          本文链接:https://www.haomeiwen.com/subject/yckxiktx.html