欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 简单工厂 、工厂方法模式和抽象工厂模式

简单工厂 、工厂方法模式和抽象工厂模式

2025/3/13 0:18:57 来源:https://blog.csdn.net/xu990128638/article/details/146174971  浏览:    关键词:简单工厂 、工厂方法模式和抽象工厂模式

简单工厂 、工厂方法模式和抽象工厂模式

1.模式性质与定位

简单工厂:并非正式的设计模式(属编程习惯),通过单一工厂类根据参数判断创建不同产品,本质是将对象创建逻辑集中管理。
工厂方法:是标准的创建型设计模式,定义抽象创建接口,由子类决定实例化哪个具体产品类,强调 “单一产品” 的灵活创建。
抽象工厂:同样是创建型设计模式,聚焦 “产品族” 的创建,一个工厂类负责创建一组相关产品(如手机、耳机、充电器组成的电子产品族)。

2产品创建范围

简单工厂、工厂方法:侧重单个产品的创建。例如,创建 “手机” 这一产品,简单工厂通过条件判断决定具体手机类型,工厂方法通过子类工厂创建特定手机。
抽象工厂:关注多个相关产品的组合创建。如创建 “手机 + 耳机” 的产品族,抽象工厂需定义多个创建方法,分别生成不同类型的产品。

3.扩展性与开闭原则

简单工厂:扩展性差。新增产品时需修改工厂类的创建逻辑(如添加if-else或switch分支),违反开闭原则。
工厂方法:扩展性好。新增产品时,只需定义新的产品类和对应的工厂子类,无需修改原有工厂代码,完全符合开闭原则。
抽象工厂:扩展性较复杂。新增产品族时,可通过扩展工厂子类实现;但新增某一产品类型(如产品族中新增 “平板”),需修改抽象工厂接口及所有具体工厂类,违背开闭原则。

  1. 结构复杂度
    简单工厂:结构最简单,仅一个工厂类处理所有产品创建逻辑。
    工厂方法:复杂度适中,包含抽象产品、具体产品、抽象工厂、具体工厂等类,需为每个产品设计对应的工厂子类。
    抽象工厂:结构最复杂,涉及多个产品接口、多个具体产品类,以及包含多个创建方法的抽象工厂和具体工厂类,代码量和类关系更多。
  2. 典型应用场景
    简单工厂:适用于产品种类少、创建逻辑不复杂,且后续扩展需求低的场景,如简单的日志记录器创建。
    工厂方法:适用于需要灵活扩展产品类型的场景,如不同数据库连接对象的创建(新增数据库类型时,扩展工厂子类即可)。
    抽象工厂:适用于产品需成族搭配使用的场景,如跨平台 UI 组件(Windows 和 Mac 的 “按钮 + 文本框” 组件族,通过抽象工厂创建对应平台的组件组合)。
4. 简单工厂模式
  1. 定义支付接口
public interface Payment {String pay(String orderId, double amount);
}

2.实现微信支付类

public class WeChatPayment implements Payment {@Overridepublic String pay(String orderId, double amount) {return "使用微信支付,订单号:" + orderId + ",金额:" + amount;}
}

3.实现支付宝支付类

public class AlipayPayment implements Payment {@Overridepublic String pay(String orderId, double amount) {return "使用支付宝支付,订单号:" + orderId + ",金额:" + amount;}
}
  1. 创建简单工厂类
public class PaymentFactory {public static Payment createPayment(String payType) {if ("wechat".equals(payType)) {return new WeChatPayment();} else if ("alipay".equals(payType)) {return new AlipayPayment();}return null;}
}
  1. 客户端调用
public class 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词