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

顺德哪家做网站网络推广免费网站

顺德哪家做网站,网络推广免费网站,旅游公司网站开发与实现,怎么做切片网站抽象工厂模式:创建产品族的设计模式 一、模式核心:统一创建相关产品族,解耦复杂对象组合 在软件开发中,当需要创建一组相关或依赖的对象(如 “汽车工厂” 同时生产 “发动机” 和 “轮胎”),且…

抽象工厂模式:创建产品族的设计模式

一、模式核心:统一创建相关产品族,解耦复杂对象组合

在软件开发中,当需要创建一组相关或依赖的对象(如 “汽车工厂” 同时生产 “发动机” 和 “轮胎”),且不同产品族(如 “燃油车” 和 “电动车”)的对象组合存在差异时,简单工厂模式已无法满足需求。

抽象工厂模式(Abstract Factory Pattern) 提供一个创建 “产品族” 的接口,每个具体工厂负责创建特定产品族的所有对象。例如,燃油车工厂创建燃油发动机和橡胶轮胎,电动车工厂创建电动发动机和防滑轮胎。核心解决:

  • 产品族解耦:客户端无需知道具体产品类,只需依赖抽象接口。
  • 一致性保证:确保同一产品族的对象兼容(如发动机与轮胎适配)。
  • 扩展性增强:新增产品族时,只需实现新的具体工厂,不影响现有代码。

核心角色

  1. 抽象工厂(Abstract Factory):声明创建产品族的接口(如createEngine()createTire())。
  2. 具体工厂(Concrete Factory):实现抽象工厂接口,创建特定产品族的对象(如FuelCarFactoryElectricCarFactory)。
  3. 抽象产品(Abstract Product):定义产品族中对象的公共接口(如EngineTire)。
  4. 具体产品(Concrete Product):实现抽象产品接口,属于特定产品族(如FuelEngineElectricTire)。

核心思想与 UML 类图

PlantUML Diagram

二、核心实现:汽车工厂生产发动机与轮胎

1. 定义抽象产品接口

发动机接口
public interface Engine {  void start(); // 启动发动机  
}  
轮胎接口
public interface Tire {  void inflate(); // 给轮胎充气  
}  

2. 实现具体产品类

燃油发动机(燃油车产品族)
public class FuelEngine implements Engine {  @Override  public void start() {  System.out.println("燃油发动机启动:轰鸣声");  }  
}  
电动发动机(电动车产品族)
public class ElectricEngine implements Engine {  @Override  public void start() {  System.out.println("电动发动机启动:静音");  }  
}  
橡胶轮胎(燃油车产品族)
public class RubberTire implements Tire {  @Override  public void inflate() {  System.out.println("给橡胶轮胎充气至2.5Bar");  }  
}  
防滑轮胎(电动车产品族)
public class AntiSlipTire implements Tire {  @Override  public void inflate() {  System.out.println("给防滑轮胎充气至2.8Bar");  }  
}  

3. 定义抽象工厂接口

public interface CarFactory {  Engine createEngine(); // 创建发动机  Tire createTire(); // 创建轮胎  
}  

4. 实现具体工厂类

燃油车工厂
public class FuelCarFactory implements CarFactory {  @Override  public Engine createEngine() {  return new FuelEngine(); // 返回燃油发动机  }  @Override  public Tire createTire() {  return new RubberTire(); // 返回橡胶轮胎  }  
}  
电动车工厂
public class ElectricCarFactory implements CarFactory {  @Override  public Engine createEngine() {  return new ElectricEngine(); // 返回电动发动机  }  @Override  public Tire createTire() {  return new AntiSlipTire(); // 返回防滑轮胎  }  
}  

5. 客户端调用

public class ClientDemo {  public static void main(String[] args) {  // 创建燃油车工厂并生产部件  CarFactory fuelFactory = new FuelCarFactory();  Engine fuelEngine = fuelFactory.createEngine();  Tire fuelTire = fuelFactory.createTire();  System.out.println("燃油车部件:");  fuelEngine.start(); // 输出:燃油发动机启动:轰鸣声  fuelTire.inflate(); // 输出:给橡胶轮胎充气至2.5Bar  // 创建电动车工厂并生产部件  CarFactory electricFactory = new ElectricCarFactory();  Engine electricEngine = electricFactory.createEngine();  Tire electricTire = electricFactory.createTire();  System.out.println("\n电动车部件:");  electricEngine.start(); // 输出:电动发动机启动:静音  electricTire.inflate(); // 输出:给防滑轮胎充气至2.8Bar  }  
}  

输出结果

燃油车部件:  
燃油发动机启动:轰鸣声  
给橡胶轮胎充气至2.5Bar  电动车部件:  
电动发动机启动:静音  
给防滑轮胎充气至2.8Bar  

三、抽象工厂模式 vs 工厂模式

对比维度工厂模式抽象工厂模式
处理对象单一产品类型多个相关产品组成的产品族
工厂职责创建单个产品创建一个产品族的所有产品
扩展性新增产品需修改工厂类新增产品族只需新建工厂
复杂度简单复杂(适合大型系统)
典型场景日志器、数据库连接跨平台 UI 组件、汽车生产线

四、适用场景

场景示例优势
多产品族的系统操作系统界面(Windows/macOS 的按钮 + 窗口)统一创建同风格的所有组件
产品族内对象需协同工作发动机与轮胎必须适配确保同一工厂的产品兼容
需屏蔽产品实现细节客户端无需知道具体部件类型依赖抽象接口,降低耦合度

五、总结

抽象工厂模式通过 “工厂创建产品族” 的设计,解决了复杂系统中多产品协同创建的问题。它在 Java Swing(跨平台组件工厂)、Spring 框架(BeanFactory)中均有应用,但需注意:若产品族频繁新增产品(如新增 “变速箱”),会导致抽象工厂接口频繁修改,此时可结合工厂方法模式优化。

扩展思考

  • 如何使用反射机制动态加载具体工厂?
  • 抽象工厂模式与依赖注入(DI)有何关联?
http://www.dtcms.com/wzjs/255745.html

相关文章:

  • 玉田县住房和城乡建设局网站株洲24小时新闻
  • 东莞常平做网站新闻最近的新闻
  • 石家庄集团公司网站建设百度网站分析
  • 网站域名后缀cc自媒体平台
  • 北京网站建设q.479185700強爱站网工具
  • 宣城网站推广全国疫情又严重了
  • 武汉专业建网站廊坊网站排名优化公司哪家好
  • 手机网站建设维护协议书chatgpt中文在线
  • 企业门户平台设计方案关键字优化
  • 上海最专业的网站设草根seo博客
  • 企业网站维护百度竞价代理商
  • app下载安卓软件seo排名优化价格
  • 德州网站建设招聘男生短期培训就业
  • 香港新世界机房网站今日热点新闻排行榜
  • 如何选择邯郸网站建设网络推广的基本方法
  • 手机网站开发 宽度手机百度高级搜索入口在哪里
  • 上海公安门户网站官网下载中心外贸怎么建立自己的网站
  • 口碑营销与病毒营销的区别整站关键词排名优化
  • 华艺网站建设长春seo排名收费
  • 自定义投票网站怎么做获客渠道有哪些
  • 丽水专业的网站建设建站公司哪个好
  • 视频网站用php做官网制作公司
  • 搜索排名优化网站排名优化seo日常优化内容是什么
  • 支持手机网站的空间房地产十大营销手段
  • 网站制作一条龙千锋教育地址
  • 网站怎么申请微博登录seo+网站排名
  • 郑州模板网站百度的代理商有哪些
  • 谷歌怎么建网站网站优化公司哪家效果好
  • 西部数码如何建设自己的网站慧聪网
  • php模板网站百度经验首页官网