网站首页 > 教程分享 正文
(二)抽象工厂模式
上节讲的工厂模式根据单一原则,一个工厂只生产一个对象,这样当业务复杂时系统必然会显得十分臃肿。显然没有达到我们使用设计模式的目的。当我们的产品对象可以分级分类时,是不是可以让指定工厂按照类别或是级别去创建一类对象呢?这时候我们的抽象工厂就派上用场了。
今天讲的抽象工厂模式很好地解决了工厂模式中一个工厂子类只负责创建一个产品的弊端。这里先引用一下产品族和产品等级的概念:
- 产品族:就是一个产品系,比如美的牌空调,洗衣机,电饭煲等;类似还有格力、奥克斯等;
- 产品等级:就是一个产品类,比如美的空调,格力空调,奥克斯空调等;都是空调类。
因此,当有多个产品等级结构时,抽象工厂可以用一个工厂等级结构创建多个不同产品等级结构的产品对象;而工厂方法模式面对的更多的是一个产品等级结构。这便是二者的主要区别。所以,当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、有效率。
1,抽象工厂模式设计原则
- 抽象工厂(IFactory):所有工厂方法的父类;
- 具体工厂(ConcreateFactory):实现抽象工厂的某类具体工厂;
- 抽象产品(IProduct):某类产品的父类;
- 具体产品(ConcreateProduct):具体产品,由某类具体工厂负责创建。
2,简单案例
我们在课程产品族的基础上,增加两个产品,如课程提供录播视频和课程笔记。(将业务横向和纵向划分,横向上有 Java 和Python 课程,纵向上每个课程都有提供视频和笔记功能。)
3,抽象工厂模式的点评
- 在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为在抽象工厂角色中规定了所有可能被创建的产品集合,要支持新种类的产品就意味着要对该接口进行扩展,而这将涉及到对抽象工厂角色及其所有子类的修改,显然会带来较大的不便。
- 开闭原则的倾斜性:从上例中可以看出,添加一个工厂和产品族是容易的,比如 BigDataCourseFactory,但是添加产品等级如课程支持提供源码则较困难。
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)