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

Java设计模式-简单工厂(Simple Factory)模式

介绍

简单工厂(Simple Factory)模式,又称为静态工厂方法(Static Factory Method)模式。
由一个工厂类来创建具体产品,即创建具体类的实例。

简单工厂模式从概念上涉及三个角色:

  • 抽象产品角色:是具体类的父类,规定了所有类的共同行为。一般是抽象类、或者接口。
  • 具体产品角色 :是具体的实现类,继承父类、或者实现父接口。
  • 工厂类角色:提供静态方法,即工厂方法,供客户端调用,根据传入的参数,来创建具体的产品,即具体类的实例化。工程类提供的工厂方法可以有多个。

当然,上面的三个角色是从概念上进行划分的,在具体实现上,有些角色可以合并。

代码示例

// 定义了一个接口
package com.thb;public interface Shape {// 面积double area();// 周长double perimeter();
}// 一个具体实现类:圆
package com.thb;public class Circle implements Shape {// 半径private double r;public double area() {System.out.println("圆的面积");return Math.PI * Math.pow(r, 2);}public double perimeter() {System.out.println("圆的周长");return 2 * Math.PI * r;}// 设置半径public void setRadius(double r) {this.r = r;}
}// 具体实现类:矩形
package com.thb;public class Rectangle implements Shape {// 长private double length;// 宽private double width;public double area() {System.out.println("矩形的面积");return length * width;}public double perimeter() {System.out.println("矩形的周长");return 2 * (length + width);}// 设置长和宽public void setLengthAndWidth(double length, double width) {this.length = length;this.width = width;}
}// 定义一个工厂类ShapeFactory 
package com.thb;public class ShapeFactory {// 一个静态工厂方法public static Shape getInstance(String shapeName) {if (shapeName == "circle") {return new Circle();} else if (shapeName == "rec") {return new Rectangle();} else {return null;}}
}// 客户端
package com.thb;public class Test1 {public static void main(String[] args) {Shape circle = ShapeFactory.getInstance("circle");Shape rectangle = ShapeFactory.getInstance("rec");}
}
http://www.lryc.cn/news/94889.html

相关文章:

  • 微软所有业务线梳理
  • SDN系统方法 | 1. 概述
  • 【数据分享】1929-2022年全球站点的逐日平均压力数据(Shp\Excel\12000个站点)
  • Profibus DP主站转Modbus TCP网关profibus从站地址范围
  • MySQL子查询
  • 学IT上培训班有用吗?
  • BI如何对接金蝶云星空数据源?奥威BI SaaS平台有绝招
  • 鼎镁科技冲刺A股上市失败,董事长涂季冰三年薪水超过6000万元
  • PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
  • day37-框架
  • 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现
  • jenkins 采用ssh方式连接gitlab连接不上
  • 前缀和模板算法
  • SpringBoot 启动输出 Git 版本信息(2023/07/11)
  • SSH客户端连接远程服务器
  • “深入理解Redis:高性能缓存与数据存储的秘密“
  • 【论文阅读笔记】Attack-Resistant Federated Learning with Residual-based Reweighting
  • DevOps B站学习版(二)
  • MySQL(一)基本架构、SQL语句操作、试图
  • MySQL事务基础知识
  • form表单禁止浏览器自动填充密码
  • ios oc button 设置
  • 山西电力市场日前价格预测【2023-07-17】
  • vue3功能实现
  • 微服务系列文章 之 SpringCloud中遇到的一些bug
  • Linux——权限
  • [英语单词] components;
  • 【观察者模式】 ——每天一点小知识
  • el-ment ui 表格组件table实现列的动态插入功能
  • gitLab修改密码后,sourceTree如何修改密码