这篇文章主要介绍“Java怎么实现工厂方法设计模式”,在日常操作中,相信很多人在Java怎么实现工厂方法设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现工厂方法设计模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
工厂方法模式使我们能够在不将创建逻辑暴露给客户端的情况下创建对象,并使用通用接口引用新创建的对象。它是最广泛使用的创作模式之一。
此模式也称为 虚拟构造函数。
根据 Gamma等人的Design Patterns,这种模式的目的 是:
-
定义用于创建对象的接口,但让子类决定实例化哪个类。Factory方法允许类将实例化延迟到子类。
Factory方法用于创建对象。超类指定所有标准和通用行为,然后将创建详细信息委托给客户端提供的子类。
Factory方法使设计更具可定制性,而且更复杂一些。其他设计模式需要新类,而Factory只需要新操作。
结构体
工厂方法模式的结构如下图所示:
图:工厂方法模式的结构
如今,static
类的 方法通常用作返回所需类类型的对象的工厂方法。与构造函数不同,它返回的实际对象可能是子类的实例,也可能重用现有对象,而不是创建新对象。
使用a factory
代替a的一个 优点 constructor
是 factory
方法可以具有不同的和更具描述性的名称。
例
让我们考虑一个根据客户需求绘制不同几何形状的应用程序。应用程序的类图如下所示:
图:工厂方法模式示例
所述 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