设计模式学习-创建型模式总结

本文总结了设计模式中的创建型模式,包括简单工厂、工厂方法、抽象工厂、原型、建造者和单例模式。这些模式将对象的创建与使用分离,遵循单一职责原则,便于维护和扩展。在实践中,应灵活运用设计模式,以实现面向对象设计的原则,提升代码质量。

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

前面几天的学习中,学习了常见设计模式中的创建型模式,分为简单工厂模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式、单例模式等。它们具有的共同优点是:创建型模式对于类的实例化过程进行了抽象,将对象的生成过程和对象的实现过程进行了分离,保证了的单一职责原则,调用方调用的时候,只需要知道获得对象的接口,并不要了解复杂的生成过程;同时由于只暴露了对外的接口,内部的实现细节修改起来也比较方便,符合开闭原则。

在实际的的开发过程中,并不能对着设计模式照搬硬套,而应该在设计模式的基础上,根据代码的实际情况,写出适合的代码结构,我们最终的目的是实现面向对象设计六大原则,保证项目的可用性、易读性、扩展性等,而设计模式只是我们达到这一个目标的辅助手段。

下面是对前面学习的创建型模式做了一个总结。

模式名称模式构成优点缺点
简单工厂模式Factory
Product
ConcreteProduct
1.结构简单,易读;
2.客户端只要传入相应的参数就可以获取对象,不用了解细节,可以通过配置文件来执行,提高了灵活性
1.工厂类中集合了所有产品对象创建的过程和判断过程,职责重,代码复杂;
2.新增产品需要修改工厂列,不符合开闭原则,不利于扩展和维护
工厂方法模式Product
ConcreteProduct
Factory
ConcreteFactory
1.继承了简单工厂模式的优点
2.根据多态性设计,对于新增的产品,只需要创建对应的产品实现类和产品工厂类,不需要对原来的代码进行修改
1.每增加一个产品实现类,就要编写一个对应的产品工厂类,对于比较多的产品,代码量比较大,系统复杂度高
抽象工厂模式AbstractFactory
ConcreteFactory
AbstractProductA
ConcreteProductA
AbstractProductB
ConcreteProducbB
1.抽象工厂类在某些方面继承了工厂方法的优点,并对它进行了优化,比如增加新的产品族时,只要增加一个新的工厂和具体的产品类就可以,在产品比较多的情况下,减少了类的数量,一定程度上保证了开闭原则
2.对于同一个产品族多个对象在一起工作的时候,能够保证多个对象都属于同一个产品族
只是增加产品族比较方便,但如果产品等级结构发生了变化,那么要对每个产品工厂进行修改,工作量大,违背了开闭原则
建造者模式Builder
ConcreteBuilder
Product
Direcotr
1.调用方不需要知道产品生成的详细过程,将产品生成和使用分离,实现了解耦
2.建造者相互独立,调用方替换产品只需要修改相应的建造者
3.更加精细的控制产品的生成过程,代码可读性高
1.并不是所有产品都适合建造者模式,只有比较相近的且结构复杂的产品才适合建造者模式
2.如果产品内部变化复杂,可能需要很多的建造者类,代码量大,系统复杂
    
单例模式深克隆、浅克隆1.当创建比较复杂的对象的时候,原型模式可以简化生成过程,提高创建对象的速度
2.不需要专门的工厂类,方法写在类内部,减少了代码的复杂度
3.可以完全复制当前对象的所有状态
1.需要为每个类编写自己的clone方法,代码量大
2.当类内容发生了变化,需要修改clone方法,不符合开闭原则
3.复杂的类要完成其clone方法,实现比较复杂
原型模式饿汉式、双重检查锁定、IoDH1.单例模式类中封装了唯一实例,严格控制了用户怎样访问它
2.由于系统内存中只存在了一个对象,节省了系统资源,相对于一些频繁创建和销毁的对象,明显提高了性能
3.基于单例模式可以变幻出控制对象数目的类
职责重,既有业务方法,又有创建方法,违背了单一职责原则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值