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

设计模式-工厂方法(创建型)

创建型-工厂方法

简单工厂

  1. 将被创建的对象称为“产品”,将生产“产品”对象称为“工厂”;
  2. 如果创建的产品不多,且不需要生产新的产品,那么只需要一个工厂就可以,这种模式叫做“简单工厂”,它不属于23中设计模式之一;
  3. 简单工厂这种模式不符合对拓展开放,对修改关闭开闭原则,因为这种设计模式,新增产品的时候需要修改工厂类代码;

简单工厂:

/** 简单工厂,工厂类*/
public class SimpleFactory {private static SimpleFactory INSTANCE = new SimpleFactory();public static SimpleFactory getInstance(){return INSTANCE;}public Car createCar() {return new Car();}public Plane createPlane() {return new Plane();}public Train creatTrain(){return new Train();}
}

简单工厂使用:

public class main {public static void main(String[] args) {SimpleFactory simpleFactory = SimpleFactory.getInstance();Car car = simpleFactory.createCar();Plane plane = simpleFactory.createPlane();Train train = simpleFactory.creatTrain();}
}

这种模式如果产生一个other交通工具,还需要在工厂类中新增creatOther()方法。

工厂方法

角色

  1. 抽象工厂:提供创建产品的接口,调用者通过它访问具体的工厂的工厂方法;
  2. 具体工厂:实现抽象工厂中的抽象方法,完成具体的创建;
  3. 抽象产品:定义产品的规范,描述产品的主要特性;
  4. 具体产品:实现抽象产品角色定义的接口,它与具体工厂一一对应

图解

在这里插入图片描述

实现案例

产品抽象类:

public interface Vehicle {void go();
}

产品具体实现类:

public class Car implements Vehicle{@Overridepublic void go() {System.out.println("汽车在跑!");}
}public class Plane implements Vehicle{@Overridepublic void go() {System.out.println("火车在跑!");}
}public class Train implements Vehicle{@Overridepublic void go() {System.out.println("飞机在飞!");}
}

抽象工厂类:

public interface VehicleFactory {Vehicle create();
}

具体工厂类:

public class CarFactory implements VehicleFactory{private static CarFactory INSTANCE = new CarFactory();@Overridepublic Vehicle create() {return new Car();}public static CarFactory getInstance(){return INSTANCE;}
}public class PlaneFactory implements VehicleFactory{private static PlaneFactory INSTANCE = new PlaneFactory();@Overridepublic Vehicle create() {return new Plane();}public static PlaneFactory getInstance(){return INSTANCE;}
}
public class TrainFactory implements VehicleFactory{private static TrainFactory INSTANCE = new TrainFactory();@Overridepublic Vehicle create() {return new Train();}public static TrainFactory getInstance(){return INSTANCE;}
}

使用:

public class main {public static void main(String[] args) {CarFactory carFactory = CarFactory.getInstance();Vehicle vehicle = carFactory.create();vehicle.go();}
}

总结

  1. 简单工厂不符合开闭原则。
  2. 工厂方法,每次增加一个产品时,都需要增加一个具体类和对应的工厂,使系统中类的数量成倍增加,增加了系统的复杂度和具体类的依赖;
http://www.lryc.cn/news/367606.html

相关文章:

  • 分布式事务大揭秘:使用MQ实现最终一致性
  • 【IoT NTN】3GPP R18中关于各类IoT设备在NTN中的增强和扩展
  • vs - vs2015编译gtest-v1.12.1
  • 你好GPT-4o——对GPT-4o发布的思考与看法
  • QT 信号和槽 多对一关联示例,多个信号,一个槽函数响应,多个信号源如何绑定一个槽函数
  • 宝塔nginx配置
  • 容器化实践:DevOps环境下的容器交付流程
  • Linux---sudo命令
  • 前后端分离与实现 ajax 异步请求 和动态网页局部生成
  • Windows系统下CUDA、cuDNN与PyTorch的更新与安装全攻略
  • Android Dialog使用汇总
  • [数据集][目标检测]足球场足球运动员身份识别足球裁判员数据集VOC+YOLO格式312张4类别
  • 学习分享-声明式的 HTTP 客户端OpenFeign
  • python Tk 获取输入框内容,分割内容
  • 第十二章:净世山的终极考验
  • linux常用命令及其选项
  • 虚拟存储器概述
  • C++对象池设计与实现
  • 电商系统中热库和冷库的使用与数据转换
  • 【LeetCode:312. 戳气球+ 动态规划】
  • 拉格朗日乘子将不等式约束转化为等式约束例子
  • 有效的括号(oj题)
  • 快团团供货大团长如何查看帮卖团长的订单?
  • Llama模型家族之Stanford NLP ReFT源代码探索 (一)数据预干预
  • 用统一的方式处理数据
  • 山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(三十)- 微服务(10)
  • AI如何创造情绪价值
  • 基于拓扑漏洞分析的网络安全态势感知模型
  • python有short类型吗
  • k8s之deployments相关操作