Java怎么实现工厂方法设计模式
Java怎么实现工厂方法设计模式
这篇文章主要介绍“Java怎么实现工厂方法设计模式”,在日常操作中,相信很多人在Java怎么实现工厂方法设计模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java怎么实现工厂方法设计模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
工厂方法模式使我们能够在不将创建逻辑暴露给客户端的情况下创建对象,并使用通用接口引用新创建的对象。它是最广泛使用的创作模式之一。
此模式也称为虚拟构造函数。
根据Gamma等人的Design Patterns,这种模式的目的是:
定义用于创建对象的接口,但让子类决定实例化哪个类。Factory方法允许类将实例化延迟到子类。
Factory方法用于创建对象。超类指定所有标准和通用行为,然后将创建详细信息委托给客户端提供的子类。
Factory方法使设计更具可定制性,而且更复杂一些。其他设计模式需要新类,而Factory只需要新操作。
结构体
工厂方法模式的结构如下图所示:
图:工厂方法模式的结构
如今,static
类的方法通常用作返回所需类类型的对象的工厂方法。与构造函数不同,它返回的实际对象可能是子类的实例,也可能重用现有对象,而不是创建新对象。
使用afactory
代替a的一个优点constructor
是factory
方法可以具有不同的和更具描述性的名称。
例
让我们考虑一个根据客户需求绘制不同几何形状的应用程序。应用程序的类图如下所示:
图:工厂方法模式示例
所述ShapeFactory
类具有静态方法getShape()
,它返回GeometricShape
字符串名称输入的基础上对象。
Java实现
我们已经介绍了上面讨论的应用程序的Java实现。
让我们首先为产品制作一个接口factory
。
/**
*产品界面
*/
公共界面GeometricShape{
voiddraw();
}
以下是上述接口的实现:
/**
*混凝土产品
*/
publicclassLine实现GeometricShape{
@覆盖
publicvoiddraw(){
系统。出。println(“LineDrawn。”);
}
}
/**
*混凝土产品
*/
publicclassRectangle实现GeometricShape{
@覆盖
publicvoiddraw(){
系统。出。println(“绘制矩形。”);
}
}
/**
*混凝土产品
*/
publicclassCircle实现GeometricShape{
@覆盖
publicvoiddraw(){
系统。出。println(“绘制圆圈”。);
}
}
我添加了以下枚举来命名形状:
publicenumShapeType{
LINE,
CIRCLE,
RECTANGLE,
三角形
}
现在,让我们创建一个factory
提供产品的产品(在本例中GeometricShape
):
/**
*混凝土产品
*/
公共抽象类ShapeFactory{
publicstaticGeometricShapegetShape(ShapeTypename){
GeometricShapeshape=null;
开关(名字){
案例LINE:
shape=newLine();
打破;
案例CIRCLE:
shape=newCircle();
打破;
案例RECTANGLE:
shape=newRectangle();
打破;
}
回归形状;
}
}
应用程序的客户端提供所需形状的名称,如下所示。
/**
*客户
*/
公共类申请{
publicstaticvoidmain(String[]args){
//请求圆形
GeometricShapecircle=ShapeFactory。getShape(ShapeType。CIRCLE);
if(circle!=null){
圈子。draw();
}else{
系统。出。println(“此形状无法绘制。”);
}
//请求不存在的形状
GeometricShapetriangle=ShapeFactory。getShape(ShapeType。三角);
if(triangle!=null){
三角形。draw();
}else{
系统。出。println(“此形状无法绘制”);
}
}
}
该计划的输出是:
圈被绘制。
这个形状可以“吨绘制
由于存在圆形,Circle
因此返回有效对象。但是,没有带三角形的类,因此无法绘制形状。
到此,关于“Java怎么实现工厂方法设计模式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!