创建型模式总结

本文详细比较了简单工厂、工厂方法和抽象工厂三种模式的特点,并解释了它们之间的区别。此外还介绍了建造模式及其与抽象工厂的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几种工厂模式的比较和总结


流行的设计模式中,一共有这几种工厂模式:抽象工厂、工厂方法、简单工厂。所谓“工厂”这个名词在设计模式领域中表示的就是一个委托与被委托的关系,与多态无关。

简单工厂:将创建类B的职责委托给类A执行,类A就是生产类B的工厂;类B就是产品。注意,在简单工厂中只体现了职责的委托,没有父类和子类等继承关系。

工厂方法:将创建类B的职责委托给类A来执行,类B是抽象的,它有多个子类;类A也是抽象的,它也有多个子类,分别和类B的子类一一对应。注意,相比简单工厂,“工厂”这个概念在这里仍旧只体现出委托的关系,还是没有体现出“多个部件组装”的概念。不同的是,工厂方法体现了多态的概念。可以这样说,工厂方法=简单工厂 + 多态。

抽象工厂:将创建类B、C、D的职责委托给类A来执行。类B、C、D可以理解为一个产品包的多个子产品。例如一辆汽车的发动机、外壳、座椅。同时,由于产品包有多个系列,因此类B、C、D是抽象的,它们分别有各自的子类。例如经济型轿车、商务型轿车两个产品包都有各自适用的发动机、外壳和座椅子类。类似工厂方法,工厂类A也有和产品部件相对应的子类层次。和工厂方法的不同是,抽象工厂可以生产多个子产品,这些子产品组成一个整体。可以这样说,抽象工厂=可以生产多个产品系列的工厂方法。

建造模式:多个产品具有相同的创建流程或输入参数,但每个产品的内部结构和外部形态差异性较大。为所有产品的建造流程定义一个统一的向导类(Director),为所有产品内部组件的创建方法和组装方法定义一个统一接口,即抽象建造者(Abstract Builder),为每个产品实现各自的具体建造者(Concrete Builder)。向导者以具体建造者为参数,一步步的创建产品,并通过具体建造者提供的接口获取产品成品。

抽象工厂和建造模式的不同:抽象工厂侧重于创建成系列的多个产品,建造模式侧重于一步步的完成一个复杂产品的组装。

 

单键模式


单键模式看似简单,但从实现角度看也有其复杂的地方:

1、多线程环境下,要使用Double Check来保证实例创建时的线程安全。对于C++,要使用互斥量,对于Java,要使用synchronize关键字。

 

 

2、需要将构造函数声明为私有,阻止非法的构造对象操作。

3、对于C++,要提供接口,在进程退出时要delete对象。

4、一般使用lazy-init,如果使用eager-int策略,对于C++,要在main函数外全局的调用getSingleton()方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值