当前位置:首页 > 技术知识 > 正文内容

设计模式问题:说一说简单工厂模式?

maynowei9个月前 (09-29)技术知识130

1) 什么是简单工厂

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,其主要目的是通过将对象的创建逻辑封装在一个工厂类中,从而隐藏对象的创建细节并简化对象的创建过程。

在简单工厂模式中,客户端通过向工厂类传递不同的参数来请求工厂创建不同类型的对象。

2) 代码实现

public interface Car {
void carName();
}
public class Bench implements Car {
@Override
public void carName() {
System.out.println("奔驰");
}
}
public class Wuling implements Car {
@Override
public void carName() {
System.out.println("五菱");
}
}
/**
* 简单工厂模式
* @author spikeCong
* @date 2023/3/9
**/
public class CarFactory {
//type值: 0 奔驰,1 五菱
public static Car getCar(String type){
if(type.equals("0")){
return new Bench();
}else if(type.equals("1")){
return new Wuling();
}else{
return null;
}
}
}
public class Customer {
public static void main(String[] args) {
Car car = CarFactory.getCar("1");
car.carName();
}
}

3) 工厂模式的优缺点

简单工厂模式的优点

1. 隐藏对象的创建细节,使得客户端代码更加简洁易懂。

2. 通过使用工厂类,可以集中管理所有对象的创建逻辑,便于维护和升级

3. 可以通过增加新的具体产品类,扩展系统的功能

简单工厂模式的缺点

1. 系统扩展性受到限制,因为工厂类负责所有产品的创建,如果需要添加新的产品,就需要修改工厂类的代码。

2. 代码比较复杂,难以维护和测试 : 工厂类通常集中了大量的对象创建逻辑,导致工厂类的代码比较复杂,难以维护和测试。

3. 简单工厂模式违背了开闭原则,因为每次添加新的产品都需要修改工厂类的代码。

说一说工厂方法模式?

1) 什么是工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但是具体创建哪个类的对象由子类决定

在工厂方法模式中,我们将对象的创建委托给具体的工厂类,由工厂类来负责创建具体的产品对象。这样,客户端代码只需要关心所需对象的抽象类型,无需关心具体的实现细节,从而实现了解耦。

2) 代码实现

public interface CarFactory {
Car getCar();
}
public class JinBeiFactory implements CarFactory {
@Override
public Car getCar() {
return new JinBei();
}
}
public interface Car {
void carName();
}
public class JinBei implements Car {
@Override
public void carName() {
System.out.println("金杯");
}
}
public class Customer {
public static void main(String[] args) {
Car car = new JinBeiFactory().getCar();
car.carName();
}
}

3) 工厂方法模式的优缺点

工厂方法模式的优点

用户只需要知道具体工厂的名字,就可以获取到想要的产品,不需要关注产品的创建过程

在系统新增加产品的时候,只需要添加具体产品类和对应的具体工厂,不需要对原工厂进行修改,满足了开闭原则

工厂方法模式的缺点

每增加一个产品,就需要一个具体产品类和对应的具体工厂类,这样会增加系统的复杂度.

相关文章

Android指示器,轮播与循环轮播(android轮播图代码)

Android UI Libs之CircleIndicator1. 说明CircleIndicator,顾名思义,圆形指示器,只一个可以用来做轮播的第三方库。2. 配置在模块的build.gradle...

C++并发同步核心-mutex深度解析:守护共享数据的关键

在多线程编程中,当多个线程需要访问和修改共享数据时,如果没有任何同步机制,就可能发生数据竞争(Data Race),导致程序行为不可预测、数据损坏甚至崩溃。C++标准库通过<mutex>头...

Oracle数据库无法连接问题排查(oracle数据库连接不成功)

数据库告警日志 如下图 。发现 问题时间段,没有 数据库服务故障 报错,但是存在较多 TNS-12535 、 12560 、 12170 、 00505 错误:通过检查问题时间段应用日志, 也记录了...

Oracle-架构、原理、进程(oracle进程结构)

详解:首先看张图:对于一个数据库系统来说,假设这个系统没有运行,我们所能看到的和这个数据库相关的无非就是几个基于操作系统的物理文件,这是从静态的角度来看,如果从动态的角度来看呢,也就是说这个数据库系统...

初创公司Reflect Orbital正开发镜面阵列 从太空发射阳光发电

一家加州初创公司正着眼于太空,以突破地面太阳能发电的局限性。Reflect Orbital 正在开发一个由巨型聚酯薄膜镜组成的卫星群,用于在天黑后将阳光反射回地球——这个想法潜力巨大,但面临着严峻的工...

英文美文分享: Reflect and Evolve (反思与进化)

“We do not learn from experience… we learn from reflecting on experience.” – John Dewey“我们不只是从经验中学习,...