设计模式——工厂模式

当看到“new”就想到“具体”,增加了耦合度。

       提取客户的代码中变化部分(new创建对象),单独创建一个对象(工厂)来处理“new”。这样,创建新类时,我们就不需要修改客户端代码,修改工厂对象即可。也可以把这个工厂定义为静态方法(静态工厂)

简单工厂模式

210123_9v47_913941.jpg

简单工厂模式的工厂类一般采用静态方法,通过接收不同的参数决定返回不同的对象(根据不同的条件创建不同实例)。工厂类集中了所有实例的逻辑,违反了高内聚这一原则,它所能创建的类只能是事先考虑好的,如果一旦添加新的类就需要改变工厂类了

工厂方法模式

定义:工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法(接口中创建对象的方法)让类把实例化延迟到子类.

工厂方法模式类图:

213151_E79n_913941.jpg

与简单工厂的区别:简单工厂是将对象的创建封装起来,但是它不具备工厂方法的弹性(ConcreteCreator可以有多个,需要哪个就调用哪个),不能变更正在创建的产品。

工厂方法模式的核心工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去完成,这就允许系统在不修改工厂角色的情况下,创建新的产品。

设计原则:要依赖抽象,不要依赖具体类。即不能让高层组件依赖低层组件,并且两者都应该依赖抽象。

依赖倒置原则(如果具体类不会改变则不需要遵守):

  1. 变量不可以持有具体对象的引用(new就会持有具体类,可以使用工厂)

  2. 不要让类派生自具体类(派生自抽象)

  3. 不要覆盖基类已实现的方法

抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类

221504_NRjf_913941.jpg

与工厂方法模式的区别:工厂方法使用继承,抽象工厂使用组合,而且适用于产生一系列产品集合,可以用来产生新产品集合,但是如果增加一个新产品,则要改动几乎所有的工厂类

区别

简单工厂 : 用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)

工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)   
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)  


转载于:https://my.oschina.net/OQKuDOtsbYT2/blog/193382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值