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

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

maynowei7个月前 (09-29)技术知识102

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

工厂方法模式的优点

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

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

工厂方法模式的缺点

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

相关文章

从零搭建网站?5个步骤详解网站建设全流程

在数字化时代,拥有一个专业网站已成为企业或个人品牌展示的核心竞争力。但对于新手而言,网站建设往往显得复杂难懂。本文梳理出5大关键步骤,手把手带你完成从策划到上线的全流程,省时省力不踩坑!一、前期准备:...

Objective-c单例模式的正确写法「藏」

单例模式在iOS开发中可能算是最常用的模式之一了,但是由于oc本身的语言特性,想要写一个正确的单例模式相对来说比较麻烦,这里我就抛砖引玉来聊一聊iOS中单例模式的设计思路。关于单例模式更多的介绍请参考...

Go语言进阶:时间轮(golang时间轮)

时间轮概念时间轮(Timing Wheel)是一种高效的定时任务调度数据结构,特别适合处理大量定时任务。它通过一个循环数组(轮盘)和多个槽位(buckets)来组织定时任务,每个槽位代表一个时间间隔。...

面试官:说说Oracle数据库result cache的原理是什么?

概述前面已经用实验给大家介绍了Result Cache相关内容,今天主要讨论一下Oracle 11g Result Cache的深层原理。从参数看,Oracle提供了Client Result Cac...

China, UK should focus on cooperation, eliminate distractions: Chinese ambassador

LONDON, July 12 (Xinhua) -- China and the United Kingdom (UK) should implement the important consens...

V-Ray反射光泽度渲染元素 - VRayMtlReflectGlossiness

本文提供有关反射光泽度渲染元素以及如何在合成中使用该元素的一些基本详细信息。概述反射光泽度渲染元素将图像的反射光泽度存储为灰度图像,该灰度图像表示为场景中材质设置的反射光泽度。白色区域反射光泽度最高,...