三种工厂模式总结(简单工厂、工厂方法、抽象工厂)

三种工厂模式总结(简单工厂、工厂方法、抽象工厂)


  1. 简单工厂模式

    • 核心

      具体工厂+抽象产品+具体产品。

    • 实例

      创建一个可绘制不同形状的绘图工具,可以绘制圆形、正方形、三角形,每个图形通过调用draw()方法绘图。

    • 思想

      1. 定义图形抽象接口
      2. 实例化三种图形
      3. 创建工厂类并构建创建图形方法,根据传入的字符串判断图形类型
    • 产品设计

      interface Shape:

      public interface Shape {
          void draw();
      }
      

      class CircleShape:

      public class CircleShape implements Shape{
          @Override
          public void draw() {
              System.out.println("CircleShape.draw()");
          }
      }
      

      class TriangleShape:

      public class TriangleShape implements Shape{
          @Override
          public void draw() {
              System.out.println("TrangleShape.draw()");
          }
      }
      

      class SquareShape:

      public class SquareShape implements Shape{
          @Override
          public void draw() {
              System.out.println("SquareShape.draw()");
          }
      }
      
    • 工厂设计

      class ShapeFactory:

      public class ShapeFactory {
      
          public static Shape createShape(String type) {
              if(type.equalsIgnoreCase("circle")) {
                  return new CircleShape();
              } else if (type.equalsIgnoreCase("square")) {
                  return new SquareShape();
              } else if (type.equalsIgnoreCase("triangle")){
                  return new TriangleShape();
              } else {
                  return null;
              }
          }
      
      }
      
    • 测试

      public static void main(String[] args) {
          Shape circle = ShapeFactory.createShape("circle");
          circle.draw();
          Shape square = ShapeFactory.createShape("square");
          square.draw();
          Shape triangle = ShapeFactory.createShape("triangle");
          triangle.draw();
      }
      
    • 运行结果

      CircleShape.draw()
      SquareShape.draw()
      TrangleShape.draw()
      

  2. 工厂方法模式

    • 核心

      抽象工厂+具体工厂+抽象产品+具体产品。

    • 实例

      设计一个图片加载类,具有多个图片加载器,分别对应jpg/png/gif格式的图片,加载器通过调用loadImage()方法读取图片。

    • 思想

      1. 创建图片加载器抽象接口
      2. 实例化三种图片加载器
      3. 创建图片加载器工厂抽象接口
      4. 实例化三种图片加载器工厂
      5. 调用时通过相应的图片加载器工厂得到图片加载器实例。
    • 产品设计

      interface ImageLoader:

      public interface ImageLoader {
          void loadImage();
      }
      

      class JpgImageLoader:

      public class JpgImageLoader implements ImageLoader{
          @Override
          public void loadImage() {
              System.out.println("JpgImageLoader.loadImage()");
          }
      }
      

      class PngImageLoader:

      public class PngImageLoader implements ImageLoader{
          @Override
          public void loadImage() {
              System.out.println("PngImageLoader.loadImage()");
          }
      }
      

      class GifImageLoader:

      public class GifImageLoader implements ImageLoader {
          @Override
          public void loadImage() {
              System.out.println("GifImageLoader.loadImage()");
          }
      }
      
    • 工厂设计

      interface ImageLoaderFactory:

      public interface ImageLoaderFactory {
          ImageLoader getImageLoader();
      }
      

      class JpgImageLoaderFactory:

      public class JpgImageLoaderFactory implements ImageLoaderFactory{
          @Override
          public ImageLoader getImageLoader() {
              return new JpgImageLoader();
          }
      }
      

      class PngImageLoaderFactory:

      public class PngImageLoaderFactory implements ImageLoaderFactory{
          @Override
          public ImageLoader getImageLoader() {
              return new PngImageLoader();
          }
      }
      

      class GifImageLoaderFactory:

      public class GifImageLoaderFactory implements ImageLoaderFactory{
          @Override
          public ImageLoader getImageLoader() {
              return new GifImageLoader();
          }
      }
      
    • 测试

      public static void main(String[] args) {
          ImageLoader jpgLoader = new JpgImageLoaderFactory().getImageLoader();
          jpgLoader.loadImage();
          ImageLoader pngLoader = new PngImageLoaderFactory().getImageLoader();
          pngLoader.loadImage();
          ImageLoader gifLoader = new GifImageLoaderFactory().getImageLoader();
          gifLoader.loadImage();
      }
      
    • 运行结果

      JpgImageLoader.loadImage()
      PngImageLoader.loadImage()
      GifImageLoader.loadImage()
      

  3. 抽象工厂模式

    • 核心

      抽象工厂+具体工厂+抽象产品+具体产品(与前者的区别在于这里的工厂可以生产多种产品)

    • 实例

      设计一个系统适配类,需要兼容Android/iOS/WP三种移动操作系统,对于每种系统设计相应的操作控制器和界面控制器。

    • 思想

      1. 设计操作控制器和界面控制器抽象接口。
      2. 实例化三种系统的操作控制器和界面控制器。
      3. 设计系统适配器工厂抽象接口。
      4. 实例化三种系统的系统适配器工厂。
      5. 调用时通过相应的系统适配器工厂获得相应的控制器。
    • 产品设计

      interface UIController:

      public interface UIController {
          void display();
      }
      

      interface OperationController:

      public interface OperationController {
          void control();
      }
      

      class AndroidUIController:

      public class AndroidUIController implements UIController{
          @Override
          public void display() {
              System.out.println("AndroidUIController.display()");
          }
      }
      

      class AndroidOperationController:

      public class AndroidOperationController implements OperationController{
          @Override
          public void control() {
              System.out.println("AndroidOperationController.control()");
          }
      }
      

      class IOSUIController:

      public class IOSUIController implements UIController{
          @Override
          public void display() {
              System.out.println("IOSUIController.display()");
          }
      }
      

      class IOSOperationController:

      public class IOSOperationController implements OperationController{
          @Override
          public void control() {
              System.out.println("IOSOperationController.control()");
          }
      }
      

      class WPUIController:

      public class WPUIController implements UIController{
          @Override
          public void display() {
              System.out.println("WPUIController.display()");
          }
      }
      

      class WPOperationController:

      public class WPOperationController implements OperationController{
          @Override
          public void control() {
              System.out.println("WPOperationController.control()");
          }
      }
      
    • 工厂设计

      interface SystemAdaptorFactory:

      public interface SystemAdaptorFactory {
          OperationController getOperationController();
          UIController getUIController();
      }
      

      class AndroidSystemAdaptorFactory:

      public class AndroidSystemAdaptorFactory implements SystemAdaptorFactory{
          @Override
          public OperationController getOperationController() {
              return new AndroidOperationController();
          }
      
          @Override
          public UIController getUIController() {
              return new AndroidUIController();
          }
      }
      

      class IOSSystemAdaptorFactory:

      public class IOSSystemAdaptorFactory implements SystemAdaptorFactory{
          @Override
          public OperationController getOperationController() {
              return new IOSOperationController();
          }
      
          @Override
          public UIController getUIController() {
              return new IOSUIController();
          }
      }
      
      

      class WPSystemAdaptorFactory:

      public class WPSystemAdaptorFactory implements SystemAdaptorFactory{
          @Override
          public OperationController getOperationController() {
              return new WPOperationController();
          }
      
          @Override
          public UIController getUIController() {
              return new WPUIController();
          }
      }
      
    • 测试

      public static void main(String[] args) {
          SystemAdaptorFactory androidSystemAdaptorFactory = new AndroidSystemAdaptorFactory();
          OperationController androidOperationController = androidSystemAdaptorFactory.getOperationController();
          UIController androidUIController = androidSystemAdaptorFactory.getUIController();
          androidOperationController.control();
          androidUIController.display();
      
          SystemAdaptorFactory iosSystemAdaptorFactory = new IOSSystemAdaptorFactory();
          OperationController iosOperationController = iosSystemAdaptorFactory.getOperationController();
          UIController iosUIController = iosSystemAdaptorFactory.getUIController();
          iosOperationController.control();
          iosUIController.display();
      
          SystemAdaptorFactory wpSystemAdaptorFactory = new WPSystemAdaptorFactory();
          OperationController wpOperationController = wpSystemAdaptorFactory.getOperationController();
          UIController wpUIController = wpSystemAdaptorFactory.getUIController();
          wpOperationController.control();
          wpUIController.display();
      }
      
    • 运行结果

      AndroidOperationController.control()
      AndroidUIController.display()
      IOSOperationController.control()
      IOSUIController.display()
      WPOperationController.control()
      WPUIController.display()
      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值