网站首页 > 教程分享 正文
摘要
抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在编程中,抽象工厂用于处理大量相关的依赖关系,而不需要指定它们具体的类。
正文
应用场景
抽象工厂模式通常适用于以下场景:
- 当一个类需要其子类来指定创建对象时。
- 当一个类希望由其子类来实现它的实例。
- 当一个类不能预见它需要创建哪种类的对象。
优势与劣势
优势
- 抽象工厂模式可以确保一个应用使用同一套产品,这使得产品之间的互操作性得以实现。
- 抽象工厂模式可以避免客户端与具体产品类的耦合。
- 你可以从具体工厂类中提取出其公共的代码。
劣势
- 由于使用了大量的类和接口,代码可能会变得比较复杂。
- 在产品族中增加新的产品是很困难的,它需要修改抽象工厂和所有的子工厂。
例子
//接口IButton
public interface IButton
{
string Paint();
}
//接口ICheckBox
public interface ICheckBox
{
string Paint();
}
public class MacButton : IButton
{
public string Paint()
{
return "Mac 样式的Button";
}
}
public class MacCheckBox: ICheckBox
{
public string Paint()
{
return "Mac 样式的Checkbox";
}
}
public class WinButton : IButton
{
public string Paint()
{
return "Window 样式按钮";
}
}
public class WinCheckBox : ICheckBox
{
public string Paint()
{
return "Window 样式CheckBox";
}
}
// 抽象工厂
public interface IGUIFactory
{
IButton CreateButton();
ICheckBox CreateCheckBox();
}
//Mac 具体工厂
internal class MacFactory : IGUIFactory
{
public IButton CreateButton()
{
return new MacButton();
}
public ICheckBox CreateCheckBox()
{
return new MacCheckBox();
}
}
// Windows 具体工厂
internal class WinFactory : IGUIFactory
{
public IButton CreateButton()
{
return new WinButton();
}
public ICheckBox CreateCheckBox()
{
return new WinCheckBox();
}
}
界面开发
private void btnMac_Click(object sender, EventArgs e)
{
//通过工厂创建了button与checkbox
MacFactory factory=new MacFactory();
IButton button=factory.CreateButton();
ICheckBox checkBox=factory.CreateCheckBox();
MessageBox.Show(button.Paint());
MessageBox.Show(checkBox.Paint());
}
private void btnWindows_Click(object sender, EventArgs e)
{
//通过工厂创建了button与checkbox
WinFactory factory = new WinFactory();
IButton button = factory.CreateButton();
ICheckBox checkBox = factory.CreateCheckBox();
MessageBox.Show(button.Paint());
MessageBox.Show(checkBox.Paint());
}
IGUIFactory是抽象工厂,MacFactory和WinFactory是具体工厂,IButton和ICheckBox是抽象产品,MacButton、MacCheckBox、WinButton和WinCheckBox是具体产品。
客户端代码选择并创建一个具体工厂,然后使用这个工厂创建产品。这样,客户端代码与具体产品类解耦,只依赖于抽象产品类和抽象工厂。
- 上一篇: 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)
本文暂时没有评论,来添加一个吧(●'◡'●)