ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GOF 工厂模式

2021-07-14 20:01:41  阅读:263  来源: 互联网

标签:return GOF 模式 工厂 Shape new public


GOF 创建型模式 系列文章

  1. 单例模式
  2. 工厂模式
  3. 抽象工厂模式
  4. 建造者模式
  5. 原型模式

目录


参考资料

  1. 尚学堂_简单工厂模式
  2. 尚学堂_工厂模式
  3. 菜鸟教程_工厂模式

1. 概述

  • 面向对象设计的基本原则

    • OCP (开闭原则, Open-Closed Principle) :一个软件的实体应当对扩展开
      放,对修改关闭。
    • DIP (依赖倒转原则, Dependence Inversion Principle ) :要针对接口编程,
      不要针对实现编程。
    • LoD (迪米特法则, Law of Demeter ) :只与你直接的朋友通信,而避免和
      陌生人通信。
  • 作用:实现了 创建者调用者 的分离

  • 核心本质

    • 实例化对象,用工厂方法代替new操作
    • 将选择实现类、创建对象统一管理和控制。从而将调用者和实现类解耦。
  • 分类和使用场景

    • 简单工厂(静态工厂)
      • 用来生产同一等级结构中的 任意 产品。(对于增加新的产品,需要修改已有代码)
    • 工厂
      • 用来生产同一等级结构中的 固定 产品。(支持增加任意产品)
    • 抽象工厂
      • 用来生产不同产品族的 全部 产品。(对于增加新的产品,无能为力;支持增加产品族)

2. 简单工厂

  • 简单工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。

    • 可以用if···else if···else对传入的参数进行判断
    • 也可以根据不同的类写不同的创建方法
  • 对于增加新产品无能为力!!!不修改代码的话,是无法扩展的。

  • 形状类接口及其实现类

    public interface Shape {
       void draw();
    }
    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."); }
    }
    
  • 简单工厂

    • 实现方法一:用if···else if···else对传入的参数进行判断来返回不同的对象实例
      public class ShapeFactory {
         //使用 getShape 方法获取形状类型的对象
         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(); } 
            return null;
         }
      }
      
    • 实现方法二:根据不同的类写不同的创建方法来返回不同的对象实例
      public class ShapeFactory {
         public Shape getRectangle(){ return new Rectangle(); }
         public Shape getCircle(){ return new Circle(); }
      }
      

3. 工厂模式

  • 避免简单工厂模式的缺点:不完全满足 OCP开闭原则。

  • 工厂模式和简单工厂模式 最大的不同 在于:

    • 简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类
    • 工厂方法模式有一组实现了相同接口的工厂类。
  • 优点:

    1、一个调用者想创建一个对象,只要知道其名称就可以了。
    2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
    3、屏蔽产品的具体实现,调用者只关心产品的接口。

  • 缺点:

    每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

  • 工厂模式实现

    /* ShapeFactory接口文件 */
    public interface ShapeFactory {
    	public Shape getShape();
    }
    /* RectangleFactory.java文件  */
    public class RectangleFactory implements ShapeFactory {
    	@Override
    	public Shape getShape(){ return new Rectangle(); }
    }
    /* CircleFactory.java文件  */
    public class CircleFactory implements ShapeFactory {
    	@Override
    	public Shape getShape(){ return new Circle(); }
    }
    

标签:return,GOF,模式,工厂,Shape,new,public
来源: https://blog.csdn.net/fengshiyunyan/article/details/118730224

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有