网站首页 > 教程分享 正文
原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。
抽象工厂提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类型。简单来说是为需要创建多个相关联产品的场景提供了解决思路。
举个例子
很多软件都支持配置不同颜色的主题,当切换主题时,所有按钮样式和颜色都会统一切换。
假设我们的软件只有三类按钮,分别是Button, TextField,以及ComboBox,并且我们的软件只提供两类主题,即红色主题和绿色主题。
来看一下UML :
再来看一下具体代码如何实现。
先来创建一个SkinFactory接口
public interface SkinFactory {
Button createButton();
TextField createTextField();
ComboBox createComboBox();
}
通过实现SkinFactory实现绿色主题工厂
//红色主题工厂
public class RedSkinFactory implements SkinFactory {
@Override
public Button createButton() {
return new RedButton();
}
@Override
public TextField createTextField() {
return new RedTextField();
}
@Override
public ComboBox createComboBox() {
return new RedComboBox();
}
}
红色主题工厂类类似,因为篇幅原因不再单独列出。
来看一下客户端如何使用
public class Client {
public static void main(String[] args){
//通过切换不同工厂,可以达到所有按钮颜色都变换的效果
SkinFactory skinFactory = new RedSkinFactory();
Button button = skinFactory.createButton();
ComboBox comboBox = skinFactory.createComboBox();
TextField textField = skinFactory.createTextField();
button.display();
comboBox.display();
textField.display();
}
}
总结
抽象工厂是创建模式之一,抽象工厂适合创建一系列有相关性的多个产品,虽然抽象工厂在扩展一个主题的按钮时灵活方便,但是也有一定缺点, 最大缺点就是想单独增加一个不属于任何主题的按钮时比较麻烦,比如上面的例子中,如果想增加一个关闭按钮,这个按钮即不属于红色主题也不属于绿主题,那么改动起来就比较复杂。
工厂模式三兄弟:简单工厂适合逻辑简单,创建产品数量很少的场景,工厂模式适合创建独立的产品,抽象工厂适合创建一系列有相关性的多个产品。
- 上一篇: 程序员必知!抽象工厂模式的实战应用与案例分析
- 下一篇: C#知识|基于反射和接口实现抽象工厂设计模式
猜你喜欢
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)