带你读《2022技术人的百宝黑皮书》——浅析设计模式1 —— 工厂模式(2)

简介: 带你读《2022技术人的百宝黑皮书》——浅析设计模式1 —— 工厂模式

带你读《2022技术人的百宝黑皮书》——浅析设计模式1 —— 工厂模式(1)

https://developer.aliyun.com/article/1262286?spm=a2c6h.13148508.setting.14.5b154f0euCM7pL



简单工厂模式


顾名思义,简单工厂模式是最简单的一种工厂模式,它定义了一个负责生产对象的工厂类,使用者可以根据不同参 数来创建并返回不同子类,这些子类都共用一个接口(即父类)。


结构

简单工厂模式包含三种类,分别是抽象产品类、具体产品类、工厂类,下面分别对各类及它们之间的关系作进一步说明。

image.png


image.png


使用

有了上述的基本概念,我们将简单工厂模式的使用步骤概括为:

1. step1:创建抽象产品类,并为具体产品定义好一个接口;

2. step2:创建具体产品类,其通过接口来继承抽象产品类,同时也要定义计划生产的每一个具体产品;

3. step3:创建工厂类,其创建的静态方法可以对传入的不同参数做出响应;

4. step4:外界使用者就能调用工厂类的静态方法了,通过传入不同参数来创建不同具体产品类的实例。


下面以淘宝服装店铺的商品展示销售进行阐释,比如一个衬衫专卖店需要在淘宝平台上展示旗下商品,我们可以把 所有衬衫都分别单独定义一个类,这样就可以随意添加或修改某一个新的衬衫类型,并使用 Fcatory 类来判断要创 建哪一个衬衫类型的对象,即:先声明一个父类对象的变量,再根据用户输入的参数判断新建什么具体的衬衫类型 对象。


代码实现

//step1:创建抽象产品类,定义具体产品的公共接口
public abstract class Shirt{
 public abstract void Show();
}
//step2:创建具体产品类(继承抽象产品类),定义生产的具体产品
//具体产品类A,女款衬衫
public class WomenShirt extends Shirt{
 @Override
 public void Show(){
 System.out.println("展示女款衬衫");
 }
}
//具体产品类B,男款
public class MenShirt extends Shirt{
 @Overside
 public void Show(){
 System.out.println("展示男款衬衫");
 }
}
//step3:创建工厂类,通过静态方法处理不同传入参数,从而创建不同具体产品类的实例
public class Factory{
 public static Shirt Exhibit(String ShirtName){
 switch(ShirtName){
 case "女款衬衫":
 return new WomenShirt();
 case "男款衬衫":
 return new MenShirt();
 default:
 return null;
 }
 }
}


结果输出

展示女款衬衫
没有找到商品
展示男款衬衫


UML图


image.png


优缺点

优点

1. 将对象的使用和创建过程分离开,实现解藕。客户端不需要关注对象是谁创建的、怎么创建的,只要通过工厂中  的静态方法就可以直接获取其需要的对象。

2. 将初始化实例的工作放到工厂里执行,代码易维护, 更符合面向对象的原则,做到面向接口编程,而不是面向实  现编程。


缺点

1. 工厂类中需要选择创建具体某个对象,所以一旦添加新产品则必须要对工厂中的选择逻辑进行修改,导致工厂逻  辑过于复杂,违背开闭原则。

2. 工厂类集合了所有实例(具体产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响。

3. 静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结构。


适用场景

1. 具体产品类较少时,使用简单工厂模式可以实现生产者与消费者的分离,而且也不会在工厂类中设定太复杂的判  断逻辑。

2. 使用者只知道传入工厂类的参数,不关心如何创建对象的逻辑时。


带你读《2022技术人的百宝黑皮书》——浅析设计模式1 —— 工厂模式(3)

https://developer.aliyun.com/article/1262282?groupCode=taobaotech



相关文章
|
1月前
|
设计模式 测试技术
【设计模式系列笔记】工厂模式
工厂模式是一种创建型设计模式,其主要目的是将对象的创建过程抽象出来,以便在需要的时候由子类来实现。这种模式提供了一种方法,通过调用一个共同的接口来创建一组相关或依赖的对象,而无需指定其具体的类。
137 4
|
1月前
|
设计模式 前端开发 JavaScript
【JavaScript 技术专栏】JavaScript 设计模式与实战应用
【4月更文挑战第30天】本文探讨JavaScript设计模式在提升开发效率和代码质量中的关键作用。涵盖单例、工厂、观察者、装饰器和策略模式,并通过实例阐述其在全局状态管理、复杂对象创建、实时数据更新、功能扩展和算法切换的应用。理解并运用这些模式能帮助开发者应对复杂项目,提升前端开发能力。
|
1月前
|
设计模式 数据库连接 数据库
发挥设计模式单例模式的力量:从技术到社会的转变
发挥设计模式单例模式的力量:从技术到社会的转变
|
1月前
|
设计模式 网络架构
工厂模式--设计模式
工厂模式--设计模式
34 0
|
1月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
55 0
|
5天前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
14 5
|
1月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
34 2
|
1天前
|
设计模式 Java
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
6 2
|
8天前
|
设计模式 Oracle Java
工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。
【6月更文挑战第20天】工厂模式简化对象创建,根据参数或条件生成MySQL或Oracle数据库连接。`DatabaseConnectionFactory`作为工厂,动态返回具体连接类型。装饰器模式则用于运行时动态增加对象功能,如`LoggingDecorator`为`Runnable`对象添加日志记录,保持代码整洁。在`Main`类中展示了如何使用这两种模式。
23 6
|
19天前
|
设计模式 XML Java
【设计模式】第三篇:一篇搞定工厂模式【简单工厂、工厂方法模式、抽象工厂模式】
三 结尾 如果文章中有什么不足,欢迎大家留言交流,感谢朋友们的支持! 如果能帮到你的话,那就来关注我吧!如果您更喜欢微信文章的阅读方式,可以关注我的公众号
21 5

热门文章

最新文章