码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-02-13 09:33:43      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:sof   isp   范围   display   简单工厂模式   程序   mic   说明   约束   

初识简单工厂

定义

简单工厂模式(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:如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂,一个简单工厂可以创建很多的、不相关的对象,可以把对外创建对象的职责集中到一个简单工厂来,从而实现集中管理和控制

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

标签:sof   isp   范围   display   简单工厂模式   程序   mic   说明   约束   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!