0.简单工厂-simplefactory(非23之一)

初识简单工厂

定义

简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于创建型模式。提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。(ps:简单工厂不是一个标准的设计模式)

结构和说明

Api:定义客户所需要的功能接口

Impl:具体实现Api的实现类,可能会有多个

Factory:工厂,选择合适的实现类来创建Api接口对象

Client:客户端,通过Factory去获取Api接口对象,然后面向Api接口编程

体会简单工厂

接口回顾

1:Java中接口的概念 ? 在Java中接口是一种特殊的抽象类

2:接口用来干什么 ? 通常用接口来定义实现类的外观,就相当于一份契约,根据外部应用需要的功能,约定了实现类应该要实现的功能。实现类的功能包含但是不仅限于接口约束的功能。接口是实现类对外的外观。

3:接口的思想 ——“封装隔离”

4:使用接口的好处 ? 只要接口不变,内部实现的变化就不会影响到外部应用,从而使得系统更灵活,具有更好的扩展性和可维护性---接口是系统可插拔性的保证

5:接口和抽象类的选择 (1)优先选用接口 (2)在如下情况选抽象类:既要定义子类的行为,又要为子类提供公共的功能

面向接口编程

面向接口编程是Java编程中的一个重要原则。在Java 程序设计里面,非常讲究层的划分和模块的划分。 比如常见的三层结构:

在一个层内部的各个模块交互也要通过接口

不管是一层还是一个模块或者一个组件,都是一个被接口隔离的整体

问题

既然在Java中需要面向接口编程,那么在程序中到底如何使用接口,来做到真正的面向接口编程呢?

不用模式的解决方案

有何问题? ? 把这个问题描述一下:在Java编程中,出现只知接口而不知实现,该怎么办?

使用模式的解决方案

理解简单工厂

一个典型的疑问

首先来解决一个常见的疑问:可能有朋友会认为,上面示例中的简单工厂看起来不就是把客户端里面的“new Impl()”移动到简单工厂里面吗?不还是一样通过new一个实现类来得到接口吗?把“new Impl()”这句话放到客户端和放到简单工厂里面有什么不同吗? ? 理解这个问题的重点就在于理解简单工厂所处的位置

认识简单工厂

1:简单工厂的功能 ? 可以用来创建的接口、抽象类或者是普通类的实例

2:静态工厂 ? 通常把简单工厂类实现成一个工具类,直接使用静态方法就可以了,也就是说简单工厂的方法通常都是静态的,所以也被称为静态工厂。如果想防止客户端无畏的创建简单工厂的实例,可以将简单工厂的构造方法私有化。

3:万能工厂

一个简单工厂理论上可以用来构造任何对象(不同的接口、抽象类或者是普通类的实例),所以又称之为“万能工厂”

4:简单工厂创建对象的范围 ? 建议控制在一个独立的组件级别或者一个模块级别

5:简单工厂的调用顺序示意图

6:简单工厂命名的建议

(1)类名建议为“模块名称+Factory”,比如:用户模块的工厂就称为:UserFactory

(2)方法名称通常为“get+接口名称”或者是“create+接口名称”

(3)不建议把方法名称命名为“new+接口名称

简单工厂中方法的写法 ? 简单工厂方法的内部主要实现的功能是“选择合适的实现类”来创建实例对象。 ? 注意:如果是从客户端在调用工厂的时候,传入选择的参数,这就说明客户端必须知道每个参数的含义,也需要理解每个参数对应的功能处理。这就要求必须在一定程度上,向客户暴露一定的内部实现细节

可配置的简单工厂 ? 使用反射加上配置文件,来实现添加新的实现类过后,无须修改代码,就能把这个新的实现类加入应用中

简单工厂的优缺点

1:帮助封装

2:解耦---实现了客户端和具体实现类的解耦

3:可能增加客户端的复杂度

思考简单工厂

简单工厂的本质

选择实现

何时选用简单工厂

1:如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,那么可以选用简单工厂,让客户端通过工厂来获取相应的接口,而无需关心具体实现

2:如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂,一个简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制

原文地址:https://www.cnblogs.com/weixiaotao/p/10368043.html

时间: 2024-10-09 10:33:38

0.简单工厂-simplefactory(非23之一)的相关文章

简单工厂、工厂方法与抽象工厂大比拼

简单工厂.工厂方法和抽象工厂都属于设计模式创建型,严格意义上简单工厂不属于23设计模式之一(违背了开闭原则),本文为了完整描述三工厂演变过程,对三工厂进行了整体的总结和学习,并通过三者之间的特点比较总结出各自的优缺点. 一.简单工厂: 在没有工厂之前,大家都是自给自足,生产一部车或其他工具都是自己来完成,有了工厂之后,告诉它需求就会出来相应的产品,但生产化水平比较低,工厂分工不太明确,社会上只有一个工厂,不论卡车还是公交车都由它来完成,相当于一个工厂多条生产线. 类图: 代码: /*******

设计模式--简单工厂应用 java

要实现java面向对象,那么我们来写个简单的工厂来实现java的封装.继承.复用的例子,还有,我们顺便实现函数式的简单工厂. 一.简单工厂(非函数式) 1.首先我们将通用的属性合方法放在一个普通类里边 /** * Created by LK on 2016/5/8. */ public class Operation { private double numberA = 0; private double numberB = 0; public double getNumberA() { ret

设计模式之简单工厂模式(Simply Factory)摘录

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 该模式中包含的角色及其职责:(1).工厂(Creator)角色:简单工厂模式的

一(1)简单工厂模式

1 设计模式中经常用到程序设计中的封装,继承,多态的思想.不同的设计模式使代码更加灵活,容易扩展. 2 设计模式中一般都会存在父类的概念,父类一般是抽象类,内部维护的变量,用于子类继承:维护的抽象方法,用于子类去具体实现. 3 对于一个方案的模式设计,要首先抽象出父类,想出父类中要维护哪些子类都要用到的变量:维护哪些子类都要去实现的方法. 扩展性的体现:主要体现在多态的实现部分,比如增加新的需求,要求可以计算a的b次幂,不需要动加减乘除的具体实现代码(类),只需要增加新类,去实现幂运算,在工厂类

设计模式之简单工厂和单列的区别

 1.什么是设计模式 * 解析:针对特定问题而提出特定的解决方案 简单工厂不算23种设计模式中的一种,--只是一个抽象工厂   2.什么简单工厂呢?   01.简单工厂的概念 一个普通的类,在该类定义一个方法:该方法是用静态(static)修饰,返回值为父类的类型,通常方法会带一个参数. 02.代码举例 public class PizzaFactory { //定义一个 static 并且返回值类型是 父类类型的方法 携带一个参数 public static Pizza getInstance

《大话设计模式》——读后感 (1)代码无错就是优?——简单工厂模式

本篇是我学习设计模式后的第一篇文章,由于本模式也比较简单,在此我就多啰嗦一下. 学习本模式之前请下看一下我的<大话设计模式铺垫>文章,然后回答思考如下问题: 1.UML类图看懂了吗?2.java的3大特性真的懂了吗?知道为什么要封装.继承.多态了吗? 对于和我一样的菜鸟而言,我根本就不知道什么是设计模式,那怎么办?学呗.怎么样的学习设计模式呢?看UML类图,然后结合代码加以理解,废话不多刷,先上图: 从图中我独处了如下信息: 1.运算类是个抽象类,而不是接口.(不懂就去看UML类图) 2.加.

[Python设计模式] 第1章 计算器——简单工厂模式

写在前面的话 """ 读书的时候上过<设计模式>这一门课,当时使用的教材是程杰老师的<大话设计模式>,使用的语言是C#,学过课程之后初期深感面向对象思想的伟大,但是很少应用到实际开发中.后来我接触了Python,现在工作中用到最多的也是Python,或许是因为Python的便利性,我写的很多脚本/程序都还是面向过程编程,缺少面向对象的思想在里边.因此,我打算重读程杰老师的<大话设计模式>并用Python进行实践. ""&

浅析设计模式(四)——创建型模式之simple-factory(简单工厂方法,非设计模式)

简单工厂方法simple-factory 注:部分内容参考自<Head First设计模式>和GoF<设计模式:可复用面向对象软件的基础> 首先需要说明的是:简单工厂方法不是一种设计模式,它更像是一种编程习惯. 定义:简单工厂方法把变化的部分(即创建对象的细节)封装起来,即通过工厂类(Factory)来处理创建对象的细节. 这种处理方式把创建对象的细节进行了简单的封装,单独进行管理,使之解耦,便于维护. 例如:要创建不同类型的Pizza,我们不在PizzaStore的方法中直接根据

23种设计模式(2)-简单工厂模式

这些设计模式都是在这么多年的软件开发中,先辈对软件重构的经验总结提炼的结果,这些设计模式要遵循软件设计的六原则.每一种设计模式都有相应的需求场景的.有了这些设计模式的思想和面向对象的思想,在软件设计特定的需求中会给你解决思路. 一,需求场景 在此,我也借用书上看到的一个例子.计算器工厂给我们留了一些任务,设计一个计算器做成成品卖给买家.但是这个任务是分两个阶段让我们实现的.如下: 阶段一:买家目前只需要计算器具有加减程序的功能即可.别的功能待市场需求再做设计.也就是阶段二的任务. 阶段二:阶段一