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

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

maynowei8个月前 (09-29)技术知识114

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) 工厂方法模式的优缺点

工厂方法模式的优点

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

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

工厂方法模式的缺点

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

相关文章

Axure RP设计伸缩导航、遮罩弹窗、返回顶部的方法

以下几小教程使用的是Axure的动态面板来实现,内容简单,适合菜鸟查阅,老鸟可飘过,顺便帮忙点个赞哈/偷笑。一.伸缩/隐藏导航栏例如:鼠标移动到一级导航上,二级导航会下拉方式显示1.打开Axure,拖...

Win10桌面/手机版最深层次开发功能挖掘

IT之家讯 Win10开发者预览版为我们提供了一个Win10大框架的早期概览,使开发者与热心用户都可以提前感受Win10带来的新特性,尝试新工具,而作为开发者,最关心的莫过于Windows多平台通用应...

btrace 3.0 重磅新增 iOS 支持!免插桩原理大揭秘!

重磅更新btrace 是由字节跳动抖音基础技术团队自主研发的面向移动端的性能数据采集工具,它能够高效的助力移动端应用采集性能 Trace 数据,深入剖析代码的运行状况,进而辅助优化提升移动端应用的性能...

Qt QWaitCondition 的正确使用方法

简单用法QWaitCondition 用于多线程的同步,一个线程调用QWaitCondition::wait() 阻塞等待,直到另一个线程调用QWaitCondition::wake() 唤醒才继续往...

C语言编写多线程,什么时候要使用互斥锁?为什么要使用互斥锁?

在多线程编程中,当多个线程同时访问共享资源(如变量、文件等)时,会出现竞态条件(Race Condition)问题,导致程序的行为不可预测。为了避免这种问题,需要使用互斥锁来保护共享资源的访问。互斥锁...

什么?Java 中的锁还有状态?(java中的锁都有哪些类型)

线程如果锁住了某个资源,致使其他线程无法访问的这种锁被称为悲观锁,相反,线程不锁住资源的锁被称为乐观锁,而自旋锁是基于 CAS 机制实现的,CAS又是乐观锁的一种实现,那么对于锁来说,多个线程同步访问...