Java怎么实现工厂方法设计模式

这篇文章主要介绍“Java怎么实现工厂方法设计模式”,在日常操作中,相信很多人在Java怎么实现工厂方法设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现工厂方法设计模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

工厂方法模式使我们能够在不将创建逻辑暴露给客户端的情况下创建对象,并使用通用接口引用新创建的对象。它是最广泛使用的创作模式之一。

此模式也称为  虚拟构造函数

根据 Gamma等人的Design Patterns,这种模式的目的  是:

  • 定义用于创建对象的接口,但让子类决定实例化哪个类。Factory方法允许类将实例化延迟到子类。

Factory方法用于创建对象。超类指定所有标准和通用行为,然后将创建详细信息委托给客户端提供的子类。

Factory方法使设计更具可定制性,而且更复杂一些。其他设计模式需要新类,而Factory只需要新操作。

结构体

工厂方法模式的结构如下图所示:

Java怎么实现工厂方法设计模式

图:工厂方法模式的结构

如今,static 类的  方法通常用作返回所需类类型的对象的工厂方法。与构造函数不同,它返回的实际对象可能是子类的实例,也可能重用现有对象,而不是创建新对象。

使用a factory 代替a的一个  优点  constructor 是  factory 方法可以具有不同的和更具描述性的名称。

让我们考虑一个根据客户需求绘制不同几何形状的应用程序。应用程序的类图如下所示:

Java怎么实现工厂方法设计模式

图:工厂方法模式示例

所述  ShapeFactory 类具有静态方法getShape(),它返回  GeometricShape 字符串名称输入的基础上对象。

Java实现

我们已经介绍了上面讨论的应用程序的Java实现。

让我们首先为产品制作一个接口factory

/ **
 *产品界面
 * /
公共 界面 GeometricShape {
    void  draw();
}

以下是上述接口的实现:

/ **
 *混凝土产品
 * /
public  class  Line  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“Line Drawn。”);
    }
}
/ **
 *混凝土产品
 * /
public  class  Rectangle  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“绘制矩形。”);
    }
}
/ **
 *混凝土产品
 * /
public  class  Circle  实现 GeometricShape {
    @覆盖
    public  void  draw(){
        系统。出。println(“绘制圆圈”。);
    }
}

我添加了以下枚举来命名形状:

public  enum  ShapeType {
    LINE,
    CIRCLE,
    RECTANGLE,
    三角形
}

现在,让我们创建一个  factory 提供产品的产品(在本例中  GeometricShape):

/ **
 *混凝土产品
 * /
公共 抽象 类 ShapeFactory {
    public  static  GeometricShape  getShape(ShapeType  name){
        GeometricShape  shape  =  null ;
        开关(名字){
            案例 LINE:
                shape  =  new  Line();
                打破 ;
            案例 CIRCLE:
                shape  =  new  Circle();
                打破 ;
            案例 RECTANGLE:
                shape  =  new  Rectangle();
                打破 ;
        }
        回归 形状 ;
    }
}

应用程序的客户端提供所需形状的名称,如下所示。

/ **
 *客户
 * /
公共 类 申请 {
    public  static  void  main(String [] args){
        //请求圆形
        GeometricShape  circle  =  ShapeFactory。getShape(ShapeType。CIRCLE);
        if(circle  !=  null){
            圈子。draw();
        } else {
            系统。出。println(“此形状无法绘制。”);
        }
        //请求不存在的形状
        GeometricShape  triangle  =  ShapeFactory。getShape(ShapeType。三角);
        if(triangle  !=  null){
            三角形。draw();
        } else {
            系统。出。println(“此形状无法绘制”);
        }
    }
}

该计划的输出是:

圈 被 绘制。
这个 形状 可以“吨绘制

由于存在圆形,Circle 因此返回有效  对象。但是,没有带三角形的类,因此无法绘制形状。

到此,关于“Java怎么实现工厂方法设计模式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/221923.html

(0)
上一篇 2022年1月4日
下一篇 2022年1月4日

相关推荐

发表回复

登录后才能评论