网站首页 > 教程分享 正文
应用案例
- 用户可以点不同口味的pizza,加上地区,例如北京的奶酪pizza、北京的胡椒pizza 或者是伦敦的奶酪pizza、伦敦的胡椒pizza
设计思想:pizza有两个属性:地区,口味;同时定义完两个属性就可以展示一个完整的pizza
基于工厂模式修改为抽象工厂模式
- 1) 抽象工厂模式:定义了一个interface用于创建相关或有依赖关系的对象簇,而无需指明具体的类
- 从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象)。将工厂抽象成两层,AbsFactory(抽象工厂) 和 具体实现的工厂子类。程序员可以根据创建对象类型使用对应的工厂子类。这样将单个的简单工厂类变成了工厂簇
- 此设计方案,作者本人觉的欠妥,并未真正利用到抽象工厂模式
抽象工厂模式:将零件组装成产品
- 抽象工厂的工作是将“抽象零件”组装成“抽象产品”
- 我们并不关心零件的具体实现,而是关心接口(api)。我们仅使用接口(api)将零件组装成为产品
- 设计思路:利用面向对象的设计思想结合抽象工厂模式,将对象的每一个属性看成一个零件,先构成抽象产品,再创建具体产品
produce是最后组装出来的产品
- 可能会有人说为什么一定要把一个实体类的属性拆分开来再建工厂这样会很麻烦
- 这只是基于案例改编而来的抽象工厂模式,试图思考一下,更改一下需求,如果最后的产品不是pizza,而是一个全家桶,不拆分属性,将鸡腿,汉堡,可乐视为零件,那么就能发挥抽象工厂真正的作用
特点:增加工厂(MainFactory)容易,但是增加零件(属性工厂,TasteFactory)修改过多
- 当新增一个零件时,势必会增加造该零件的工厂,所以不易频繁的增删零件
为了便于理解,修改了类的布局
比较:
- 当增加另一种产品时(比如:汉堡)
- 第一个设计方法就很难再进行拓展
- 而第二个,可视为多增加一个零件工厂,相对而言修改较少
- 当增加一个属性(比如:形状:圆形,方形)
- 第一个设计,就要在此基础上再增加一层形状的工厂,以此下去继承的层级会逐渐增高
- 第二种,只是横向拓展,层级不变
综上所述,作者认为第二种抽象工厂模式更加符合,而且易拓展。第二种
- 上一篇: 23种设计模式漫画版系列—抽象工厂
- 下一篇: Java设计模式之抽象工厂模式(抽象工厂模式实现)
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)