当前位置: 首页 > news >正文

java25种设计模式之工厂模式

Java设计模式 - 工厂模式

工厂模式是一种创建模式,因为此模式提供了更好的方法来创建对象。

在工厂模式中,我们创建对象而不将创建逻辑暴露给客户端。

例子

在以下部分中,我们将展示如何使用工厂模式创建对象。

由工厂模式创建的对象将是形状对象,如圆形,矩形。

首先,我们设计一个接口来表示Shape。

public interface Shape {void run();
}

然后我们创建三个实现接口的具体类。

以下代码用于Rectangle.java

public class Rectangle implements Shape {public void run() {System.out.println("Rectangle");}
}

Square.java

public class Square implements Shape {public void run() {System.out.println("Square");}
}

Circle.java

public class Circle implements Shape {public void run() {System.out.println("Circle");}
}

工厂模式的核心是一个Factory类。以下代码显示了如何为Shape对象创建Factory类。
ShapeFactory类基于传递给getShape()方法的String值创建Shape对象。如果String值为CIRCLE,它将创建一个Circle对象。

public class ShapeFactory {private Map<String, Shape> map = new HashMap<String, Shape>();public ShapeFactory() {map.put("rectangle",new Rectangle());map.put("square",new Square());map.put("circle",new Circle());}public Shape getShape(String type) {return map.get(type);}
}

我们在工厂类里面构造一个方法来存放我们工厂所有的实现类,这里不一定这样写,只要在调用getShape方法的时候能够根据不同的类型拿到对应的实现类工厂就可以了,有的这样写也可以,只是不太优雅而已

public class ShapeFactory {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();} else if(shapeType.equalsIgnoreCase("square")){return new Square();}return null;}
}

接下来我们来测试一下工厂模式
以下代码具有main方法,并且它使用Factory类通过传递类型等信息来获取具体类的对象。

public class TestDemo
{public static void main(String [] args){ShapeFactory shapeFactory = new ShapeFactory();Shape rectangle = shapeFactory.getShape("rectangle");rectangle.run();Shape circle = shapeFactory.getShape("circle");circle.run();Shape square = shapeFactory.getShape("square");square.run();}
}

上面的代码生成以下结果。
在这里插入图片描述总结:工厂模式就是多个实现类继承一个接口类实现同一个接口,工厂类初始化所有实现类,并标记不同实现类,调用是根据标记获得实现类执行方法。

http://www.lryc.cn/news/27437.html

相关文章:

  • 力扣-2020年最后一次登录
  • [蓝桥杯] 数学与简单DP问题
  • 浏览器的渲染过程解析
  • 【C++容器】std::fstream读写文件错误【2023.03.03】
  • UVM实战--带有寄存器的加法器
  • 笔记--学习mini3d代码
  • 图片服务器
  • 【JAVA程序设计】【C00110】基于SSM(非maven)的车辆维修管理系统
  • 微积分小课堂:用动态的眼光去找问题的最优解(最大值/最小值)【中学里的解题技巧】
  • 网络爬虫和相关工具
  • OSSFs挂载工具简介
  • Spring 容器创建初始化,获取bean流程分析
  • 无聊小知识.03 Springboot starter配置自动提示
  • 2023-03-03 mysql-join类别-分析
  • Saleen 系列来袭!
  • 如何优雅地处理Java中的null值?使用Optional类来实现!
  • 巾帼绽芬芳 一起向未来(中篇)
  • espnet training
  • qsort函数的应用以及模拟实现
  • 【iobit 软件】家族系列 - 正版激活码
  • ACM-大一训练第三周(Floyd算法+并查集算法专题训练)
  • taobao.item.sku.update( 更新SKU信息 )
  • ros2创建一个工程
  • 【力扣】stack容器的探索之有效的括号
  • 【Elsevier出版社】中科院2区,SCIEEI 双检,已有发表案例,3个月左右录用
  • 基于明道云平台重建医院管理流程
  • 【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
  • ChatGPT API 低价上线,开发者可以人手一个了?
  • 品牌营销策略 | 科学经营合作伙伴关系的5个要素
  • 【剑指offer-C++】JZ20:表示数值的字符串