当前位置: 首页 > wzjs >正文

河北住房与城乡建设部网站企业快速建站

河北住房与城乡建设部网站,企业快速建站,武汉建设工程价格信息,网站下方链接图标怎么做抽象工厂模式(Abstract Factory Pattern)学习笔记 🌟 定义 抽象工厂模式属于创建型设计模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。是工厂方法模式的升级版,支持多个产品…

抽象工厂模式(Abstract Factory Pattern)学习笔记

🌟 定义

抽象工厂模式属于创建型设计模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。是工厂方法模式的升级版,支持多个产品族的创建。


🎯 适用场景

  1. 需要创建产品家族(多个关联产品)
  2. 系统要独立于产品的创建、组合和表示
  3. 需要确保产品之间的兼容性
  4. 需要切换不同产品系列
  5. 产品对象有多个创建约束条件

🔧 模式结构

📐 类图

«interface»
AbstractFactory
+createProductA() : AbstractProductA
+createProductB() : AbstractProductB
ConcreteFactory1
+createProductA() : AbstractProductA
+createProductB() : AbstractProductB
ConcreteFactory2
+createProductA() : AbstractProductA
+createProductB() : AbstractProductB
«interface»
AbstractProductA
+operationA()
ProductA1
+operationA()
ProductA2
+operationA()
«interface»
AbstractProductB
+operationB()
ProductB1
+operationB()
ProductB2
+operationB()

🛠️ 核心组成

  1. AbstractFactory(抽象工厂)

    • 声明创建产品族的方法集合
  2. ConcreteFactory(具体工厂)

    • 实现抽象工厂接口,创建特定产品族的对象
  3. AbstractProduct(抽象产品)

    • 定义产品接口,多个产品构成产品族
  4. ConcreteProduct(具体产品)

    • 实现抽象产品接口的具体类

📝 代码示例

跨平台UI组件案例

// 抽象产品:按钮
interface Button {void render();
}// 具体产品:Windows按钮
class WindowsButton implements Button {@Overridepublic void render() {System.out.println("渲染Windows风格按钮");}
}// 具体产品:MacOS按钮
class MacOSButton implements Button {@Overridepublic void render() {System.out.println("渲染MacOS风格按钮");}
}// 抽象产品:文本框
interface TextField {void input();
}// 具体产品:Windows文本框
class WindowsTextField implements TextField {@Overridepublic void input() {System.out.println("Windows文本框输入");}
}// 具体产品:MacOS文本框
class MacOSTextField implements TextField {@Overridepublic void input() {System.out.println("MacOS文本框输入");}
}// 抽象工厂
interface GUIFactory {Button createButton();TextField createTextField();
}// 具体工厂:Windows组件工厂
class WindowsFactory implements GUIFactory {@Overridepublic Button createButton() {return new WindowsButton();}@Overridepublic TextField createTextField() {return new WindowsTextField();}
}// 具体工厂:MacOS组件工厂
class MacOSFactory implements GUIFactory {@Overridepublic Button createButton() {return new MacOSButton();}@Overridepublic TextField createTextField() {return new MacOSTextField();}
}// 客户端代码
public class Application {private Button button;private TextField textField;public Application(GUIFactory factory) {button = factory.createButton();textField = factory.createTextField();}public void renderUI() {button.render();textField.input();}public static void main(String[] args) {// 根据配置选择工厂GUIFactory factory = getOSFactory();Application app = new Application(factory);app.renderUI();}private static GUIFactory getOSFactory() {String osName = System.getProperty("os.name").toLowerCase();if (osName.contains("win")) {return new WindowsFactory();} else {return new MacOSFactory();}}
}

✅ 优点

  1. 产品族一致性:保证创建的对象相互兼容
  2. 切换产品族方便:只需更换具体工厂
  3. 解耦客户端与具体类:客户端只操作抽象接口
  4. 符合开闭原则(对扩展开放-新增产品族)
  5. 符合单一职责原则:将产品创建逻辑集中管理

⚠️ 缺点

  1. 扩展产品等级困难(对修改关闭-新增产品类型)
  2. 类数量膨胀(n个产品族×m个产品类型=n×m个类)
  3. 增加系统抽象性(需要先设计好产品结构)
  4. 需要提前预判产品变化方向

🔄 相关模式对比

模式区别
工厂方法模式单个产品等级 vs 多个产品等级
建造者模式分步构建复杂对象 vs 创建产品家族
原型模式克隆现有对象 vs 创建新对象系列

💡 实践建议

  1. 产品族设计原则

    • 同一产品族中的对象需要协同工作
    • 不同产品族的对象不应混合使用
  2. 层次结构管理

    // 使用Map维护工厂实例
    public class FactoryProducer {private static Map<String, GUIFactory> factories = new HashMap<>();static {factories.put("Windows", new WindowsFactory());factories.put("MacOS", new MacOSFactory());}public static GUIFactory getFactory(String type) {return factories.get(type);}
    }
    
  3. 扩展策略

    • 新增产品族:添加新工厂+对应产品实现
    • 新增产品类型:需要修改所有工厂接口(慎用)
  4. 组合使用技巧

    // 结合单例模式管理工厂
    class MacOSFactory {private static final MacOSFactory INSTANCE = new MacOSFactory();private MacOSFactory() {}public static MacOSFactory getInstance() { return INSTANCE; }
    }
    

🚀 典型应用

  1. 跨平台UI框架

    • Java AWT/Swing的Peer机制
    • Android/iOS跨平台开发
  2. 数据库访问层

    // 抽象产品:Connection/Statement
    interface DatabaseFactory {Connection createConnection();Statement createStatement();
    }// 具体产品:MySQL/Oracle实现
    
  3. 游戏引擎

    • 不同画风的角色/场景/道具组合
    • 不同物理引擎的实现组合
  4. 企业级中间件

    • 不同消息队列的Connection/Session组合
    • 不同云服务的存储/计算组件组合

📌 实现注意事项

  1. 空对象处理

    // 空产品实现示例
    class NullButton implements Button {@Overridepublic void render() {// 无操作实现}
    }
    
  2. 参数化工厂

    // 通过枚举类型选择产品
    enum ThemeType { MATERIAL, FLAT, RETRO }class ThemeFactory {public static GUIFactory getFactory(ThemeType type) {switch(type) {case MATERIAL: return new MaterialFactory();case FLAT: return new FlatFactory();default: return new RetroFactory();}}
    }
    
  3. 组合产品创建

    // 创建关联产品组
    interface VehicleFactory {Engine createEngine();Wheel createWheel();Light createLight();
    }class CarFactory implements VehicleFactory {// 实现各部件创建方法
    }
    

掌握抽象工厂模式的关键在于理解产品族产品等级的关系,合理运用可以有效管理系统中的对象创建逻辑,特别适合需要保证产品兼容性和需要动态切换产品系列的复杂系统设计。

http://www.dtcms.com/wzjs/316114.html

相关文章:

  • 驻马店标准网站建设全网关键词指数查询
  • 东莞专业网站建设平台seo排名推广工具
  • 富阳区建设局网站首页海南网站制作公司
  • 领地网建的网站百度自然搜索排名优化
  • 淄博网站建设费用报个电脑培训班要多少钱
  • 外贸营销网站网络搜索优化
  • 网站百度不到验证码怎么办啊互联网线上推广
  • 做试玩网站b2b平台免费推广网站
  • 顺义做网站个人网站设计毕业论文
  • 甘孜州住房城乡建设局网站推广员是干什么的
  • 广州品牌seo网站推广谷歌排名优化入门教程
  • 第一网站ppt模板网站优化网络推广seo
  • 封面设计网站互联网营销培训班
  • web网站开发标题字体加粗谷歌网站优化推广
  • 安康免费做网站推广app平台
  • 设计一个网站开发方案百度识图扫一扫
  • 做律师网站电销推广团队
  • 网络组建与应用实训报告网站排名优化推广
  • 如何申请网站空间和注册域名网站设计与建设
  • 天津有做网站不错的吗今天宣布疫情最新消息
  • 上海网站备案多久网站策划书
  • php网站开发案例pdf吉林seo排名公司
  • 网站建设公司的前端百度知道问答首页
  • 装饰派单哪个网站靠谱百度推广优化排名
  • 网站建设报表明细营销推广的作用
  • 学校 html5 网站 案例seo页面优化公司
  • 中文网站建设网站降权查询工具
  • python做网站用什么河南网站推广
  • wordpress 4.7.3长沙优化科技有限公司正规吗
  • 大作设计网站官网登录成都网站快速排名提升