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

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

maynowei5个月前 (09-29)技术知识82

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

工厂方法模式的优点

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

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

工厂方法模式的缺点

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

相关文章

2018年度回顾:挖矿木马为什么会成为病毒木马黑产的中坚力量

一、概述根据腾讯御见威胁情报中心监测数据,2018年挖矿木马样本月产生数量在百万级别,且上半年呈现快速增长趋势,下半年上涨趋势有所减缓。由于挖矿的收益可以通过数字加密货币系统结算,使黑色产业变现链条十...

机器人需求驱动导航新SOTA,成功率提升15%!浙大&vivo联手打造

CogDDN团队 投稿量子位|公众号QbitAI让机器人像人一样边看边理解,来自浙江大学和vivo人工智能实验室的研究团队带来了新进展。正如视频所展示的,机器人在复杂的室内环境中不仅能自主探索,还具备...

webview 渲染机制:硬件加速方式渲染的Android Web

webview 渲染是什么?webview 渲染是用于展现web页面的控件; webview 可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于 webview 模式进行二次开发的w...

Android主流UI开源库整理(android完整开源项目)

前言最近老大让我整理一份 Android主流UI开源库 的资料,以补充公司的Android知识库。由于对格式不做特别限制,于是打算用博客的形式记录下来,方便查看、防丢并且可以持续维护、不断更新。标题隐...

Linux系统编程—互斥量mutex(linux 互斥量)

##互斥量mutex前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象。为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也...

打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理

写JAVA代码的同学都知道,JAVA里的锁有两大类,一类是synchronized锁,一类是concurrent包里的锁(JUC锁)。其中synchronized锁是JAVA语言层面提供的能力,在此不...