网站首页 > 教程分享 正文
前面的22个常用的设计模式现已学习完毕,大家可以看到22个设计模式中提及到了带有“工厂”性质的相关模式,例如:构建方法、静态构建(或工厂)方法、工厂方法、抽象工厂、简单工厂等。类似这些模式,我们拿出来将其概念跟他们之间的区别进行比较跟说明。
- 抽象工厂模式
抽象工厂模式是一种创建型模式,它能创建一系列相关或相互依赖的的对象而无需指定其具体类。那么有人要问,什么是“系列对象”?那接下来我将用生活中具体的示例来解释清楚这种概念。
例如有这样的一组对象:运输工具-引擎-控制器
- 汽车+涡轮发动机+方向盘
- 飞机+喷气式发动机+操纵杆
注:如程序中不涉及具体产品系列的话,那就不需要使用抽象工厂。
- 工厂方法模式
工厂方法模式是一种创建型模式,其在父类中提供创建对象的方法,允许子类实例化对象的类型。
如果在基类及其扩展类中都有一个构件方法的话,他可能就是工厂方法模式。
- 简单工厂模式
简单工厂模式描述了一个类,他包含了拥有大量条件语句的构建方法,可工具方法的额参数来选择对哪种产品进行初始化将其返回。
人们通常将简单工厂与普通的工厂或其他创建型设计模式混淆。在绝大多数情况下,简单工厂是引入工厂方法或抽象工厂模式时的一个中间步骤。
简单工厂通常没有子类。但当从一个简单的工厂中抽取出子类后,他看上去就会更像经典的工厂方法模式了。
注:如果你讲简单工厂声明为abstract类型,他并不会变为抽象工厂模式。
- 静态构建方法
静态构建方法是被声明为static的构建方法。意思就是你无需创建对象就能在某些类上调用该方法。
不要因为某些人将这些方法称为“静态工厂方法”而被迷惑,这种称呼并不好,工厂方法是一种依赖于继承的设计模式。如果将他设置为static,你就不能在子类中对其进行扩展,这就破坏了该模式的目的。
当静态构建方法返回一个新对象时候,它就成为构造函数的替代品。
- 构建方法
构建方法被定义为“创建对象的方法”。这意味着每个工厂方法模式的结果都是“构建方法”,但反过来则并非如此。这意味着你可以用“构建方法”来代替在重构中使用的“工厂方法”和“静态工厂方法”。
在实际中,构建方法只是构造函数调用的封装器。它可能只是一个能更好地表达意图的名称。此外,它可以让你的代码独立于构造函数的改动,甚至还可以包含一些特殊的逻辑。返回已有对象以而不是创建新对象。
许多人会仅仅因为这些方法创建了新对象而称之为“工厂方法”。其中的逻辑很好理解:所有的工程都会创建对象,而该方法会创建对象。所以显然它是一个工厂方法。但是当你正在遇到真正工厂方法时候,这将造成许多混淆跟迷惑。
猜你喜欢
- 2024-10-18 设计模式之 抽象工厂(抽象工厂模式的简单应用)
- 2024-10-18 Aha!设计模式(3)-抽象工厂(2)(抽象工厂模式结构图)
- 2024-10-18 Java经典设计模式-抽象工厂模式(抽象工厂模式在spring的应用)
- 2024-10-18 Java高级编程细节——工厂模式之抽象工厂
- 2024-10-18 java与设计模式-简单工厂-工厂方法-抽象工厂
- 2024-10-18 简单工厂,工厂方法,抽象工厂(简单工厂,工厂方法,抽象工厂区别)
- 2024-10-18 Aha!设计模式(1)-抽象工厂(1)(抽象工厂实例)
- 2024-10-18 抽象工厂模式(Abstract Factory)(抽象工厂模式的意图是)
- 2024-10-18 设计模式记录-抽象工厂模式(抽象工厂模式与工厂方法模式)
- 2024-10-18 你还在new对象吗?用个“抽象工厂模式”生产对象它不香吗
你 发表评论:
欢迎- 最近发表
-
- 有了这份900多页的Android面试指南,你离大厂Offer还远吗?
- K2 Blackpearl 流程平台总体功能介绍:常规流程功能
- 零基础安卓开发起步(一)(安卓开发入门视频)
- 教程:让你的安卓像Windows一样实现程序窗口化运行
- Android事件总线还能怎么玩?(事件总线有什么好处)
- Android 面试被问“谈谈架构”,到底要怎样回答才好?
- Android开发工具Parcel和Serialize
- Android 中Notification的运用(notification widget安卓)
- Android退出所有Activity最优雅的方式
- MT管理器-简单实战-去除启动页(mt管理器怎么去除软件弹窗)
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)