工厂模式

简介: 工厂模式

什么是工厂模式
实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法等等
工厂模式好处
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式,利用工厂模式可以降低程序的耦合性(高内聚,低耦合),为后期的维护修改提供了很大的便利,将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

工厂模式分类
简单工厂模式
简单工厂模式相当于是一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品类所对应的参数即可,但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护

public interface Car {

public void run();

}
public class AoDi implements Car {

public void run() {
    System.out.println("我是奥迪汽车..");
}

}
public class JiLi implements Car {

public void run() {
    System.out.println("我是吉利汽车...");
}

}
public class CarFactory {

 public static Car createCar(String name) {
    if(name.equals("奥迪")){
        return new AoDi();
    }
    if(name.equals("吉利")){
        return new JiLi();
    }
    return null;
}

}
public class Client{

public static void main(String[] args) {
    Car aodi = CarFactory.createCar("奥迪");
    Car jili = CarFactory.createCar("吉利");
    aodi.run();
    jili.run();
}

}
单工厂的优缺点
优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象,明确区分了各自的职责和权力,有利于整个软件体系结构的优化
缺点:工厂类集中了所有实例的创建逻辑,工厂的职责过重,而且当类型过多时不利于系统的扩展维护
工厂方法模式
什么是工厂方法模式

工厂方法模式,又称多态性工厂模式,在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做,该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节,这样的设计也更加符合单一职责原则,不能一个工厂什么汽车都能生产,也符合程序的高内聚
public interface Car {

public void run();

}
public interface CarFactory {

public Car createCar();

}
public class AoDi implements Car {

public void run() {
    System.out.println("我是奥迪汽车..");
}

}
public class JiLi implements Car {

public void run() {
    System.out.println("我是吉利汽车...");
}

}
public class JiLiFactory implements CarFactory {

public Car createCar() {
    return new JiLi();
}

}
public class AoDiFactory implements CarFactory {

public Car createCar() {
    return new AoDi();
}

}
public class Client {

public static void main(String[] args) {
    Car aodi = new AoDiFactory().createCar();
    Car jili = new JiLiFactory().createCar();
    aodi.run();
    jili.run();
}

}

相关文章
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
208 3
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
193 3
|
5月前
|
人工智能 IDE Go
JetBrains GoLand 2025.1 发布 - 为 Go 开发者打造的完整 IDE
JetBrains GoLand 2025.1 (macOS, Linux, Windows) - 为 Go 开发者打造的完整 IDE
219 0
JetBrains GoLand 2025.1 发布 - 为 Go 开发者打造的完整 IDE
|
缓存 Web App开发 自然语言处理
关于解决chatGPT注册不了报错:chatGPT邮箱不支持
ChatGPT 开放了免费注册功能。然而,在用户创建过程中,一些人遇到了如下所示的提示信息:“Oops! The email you provided is not supported”,中文翻译为“糟糕,邮箱不支持”。
901 4
|
11月前
|
JSON API 数据格式
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
169 0
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
|
安全 项目管理 开发工具
探索 GitHub:现代开发者的协作平台
GitHub 是一个基于 Git 的版本控制和协作平台,广泛应用于软件开发和项目管理。它不仅提供代码托管服务,还是开发者社区和开源项目的重要平台。本文介绍了 GitHub 的核心功能(如代码托管、协作工具、CI/CD 集成等)、使用技巧(如规范化提交信息、参与开源项目等),帮助开发者提升效率和协作能力。GitHub 自2008年成立以来,已成为全球最大的代码托管平台,支持团队协作和项目管理。
|
数据可视化
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
【Qt 学习笔记】Qt窗口 | 菜单栏 | QMenuBar的使用及说明
2998 3
|
12月前
|
PHP
深入浅出PHP之文件上传功能
【9月更文挑战第26天】本文将带你了解PHP中的文件上传功能,从基本概念到实战操作,一步步教你如何实现文件上传。我们将通过代码示例和详细的解释,让你轻松掌握这一技能。
|
SQL 安全 数据库连接
【Qt运行流程详解】从启动到事件循环的深入解读
【Qt运行流程详解】从启动到事件循环的深入解读
1265 3
|
机器学习/深度学习 人工智能 自然语言处理
「AIGC」AIGC技术入门
**摘要:** 探索AI概念与实践,涵盖AI、AIGC(人工智能生成内容)、AGI(人工通用智能)、模型大小、提示词工程、神经网络等。深度学习框架如TensorFlow支持模型构建,Transformer模型利用自注意力机制处理序列数据。大模型如LLMs擅长复杂任务,能适应企业定制需求,例如知识库问答。小模型则在资源有限时发挥作用。召回率衡量搜索效果,Tokenization将文本转化为模型输入。实际应用中,AI用于天气预报、内容生成,Transformer助力翻译,定制模型解决企业内部问题,如客户服务和知识库查询。
436 0

热门文章

最新文章