设计模式之简单工厂模式
创始人
2024-03-27 18:05:42
0

simple factory design pattern

简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例


注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。

1、简单工厂的概念

  简单工厂模式,与其说是设计模式,不如称它为编程习惯。简单工厂只提供了简单的对象生产能力,且违反了软件设计原则的 开闭原则。其没有被收录在 GoF 的二十三种设计模式中。

2、简单工厂的结构

  • 抽象产品:定义了产品的行为。
  • 具体产品:实现了抽象产品接口,使产品具像化。
  • 具体工厂:实现了生产产品的功能。

simple-factory-class

3、简单工厂的优缺点

3.1、优点

  • 封装了对象创建的具体过程,使对象的创建的使用分离,降低耦合度。

3.2、缺点

  • 违反了开闭原则。若增加了新产品,则需要修改工厂类代码。

4、简单工厂的使用场景

  • 需要将对象创建过程与对象使用过程解耦时。
  • 产品固定或变化率低时。

5、简单工厂的实现示例

  抽象产品:

public interface Product {/*** 定义产品行为*/void behavior();
}

  具体产品一:

public class OneProduct implements Product {@Overridepublic void behavior() {System.out.println("我是产品一");}
}

  具体产品二:

public class TwoProduct implements Product {@Overridepublic void behavior() {System.out.println("我是产品二");}
}

  工厂类:

public class ProductFactory {/*** 生产产品* @param type* @return*/public Product product(String type) {Product product;if ("one".equals(type)) {product = new OneProduct();} else if ("two".equals(type)) {product = new TwoProduct();} else {throw new RuntimeException("暂不能生产该类型产品");}return product;}
}

  测试类:

public class SimpleFactoryTest {public static void main(String[] args) {ProductFactory factory = new ProductFactory();Product product = factory.product("one");Product product1 = factory.product("two");product.behavior();product1.behavior();Product product2 = factory.product("three");}
}

  测试结果:

我是产品一
我是产品二
Exception in thread "main" java.lang.RuntimeException: 暂不能生产该类型产品at org.xgllhz.designpattern.createtype.simplefactory.ProductFactory.product(ProductFactory.java:23)at org.xgllhz.designpattern.createtype.simplefactory.SimpleFactoryTest.main(SimpleFactoryTest.java:19)

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...