设计模式:工厂模式

简单工厂模式:

一个系列产品,这些产品有一个公共的基类 Product,提供统一的接口,这个公共基类本身不表示任何现实中的实体。

采用继承,会有该系列产品的很多子产品ProductA, ProductB, ProductC…,每一个子类对应一个实际的现实工厂中的实体

一个工厂实例对象SimpleFactory,或者一个工厂类(提供一个公用的静态函数):这个工厂内部有参数判断,根据参数不同来创建不同的子类产品对象。

场景:客户不用再去子集去new ProductA, new ProductB等实例化对象,只用使用工厂提供的GetProcuct()函数就可以

工厂模式:

简单工厂是一个工厂,根据输入参数条件判断,在这一个工厂里面调用不同的实例化函数,来创建不同的实体。所有实体的创建都是在这一个工厂内进行,可以认为这个简单工厂是一个大杂烩,这一系列的所有产品都能生产。

工厂模式就是对之前的简单工厂的专业化处理,之前只有一个工厂(可以理解为母工厂),生产的产品不精,不够专业。之后母工厂下创建了几个子工厂(继承)。有几个产品就创建几个子工厂,每个子工厂就只能生产这一个产品。外部客户给母工厂下订单(传入参数,想要返回对象),母工厂根据需求(参数),下发给不同的子工厂,子工厂再去生产产品(创建产品对象)。

相当于生产下放(将创建对象的操作放在子工厂里面)。

之前只有一个母工厂(简单工厂)时,我们添加新的产品(子类)需要更改母工厂的判断逻辑,这样违反了程序开发的开闭原则。但是使用了工厂模式后,我们添加新的产品(子类)只需要添加一个子工厂,母工厂基本不变(多一个判断条件)

抽象工厂模式:

之前工厂模式所有的产品只有一个基类,也就是都是一个系列的。当我们有多个系列的产品时(有多个产品的基类,每个基类有很多子类产品),需要使用抽象工厂。

之前的工厂模式就是母公司只有一个产品(一个对外窗口,GetProduct(),在这一个窗口中通过不同的要求获取该系列的不同产品)。现在有多个系列的产品,那就是母公司开放了多个对外窗口(GetProduct(), GetProductAA(), GetProductBB()),不同的窗口获取不同系列的产品

总结:

工厂模式大部分情况用不到。可以不看。

设计原则

设计模式的八个原则:

  1. 依赖倒置原则:高层次的代码(稳定)不应该依赖低层次的代码(变化)、抽象的代码不应该依赖具体的代码。
  2. 开放封闭原则:类模块应该开放扩展的,而其原先的代码尽量封闭不可改变。
  3. 单一职责原则:一个类应该仅有一个变化的原因,该变化隐含了它的职责,职责太多时会导致扩展时对代码东拉西扯,造成混乱。
  4. 替换原则:子类必须能够替换它的基类(IS-A),继承可以表达类型抽象。
  5. 接口隔离原则:接口应该小而完备,不该强迫用户使用多余的方法。
  6. 优先使用组合而不是继承:继承通常会让子类和父类的耦合度增加、组合的方式只要求组件具备良好定义的接口。
  7. 封装变化点:
  8. 针对接口编程,而不是针对实现编程

其他的解决创建对象问题的模式

原型模式

当一个对象创建不能用简单的new来实现,而是需要经过一些复杂的步骤来改变一些初始状态时,可以使用原型模式来创建对象。

基本思路:已有一个类对象(有很多状态,可以叫做原型),我们想根据此时状态下的原型对象来创建新的对象。就不再需要繁琐的步骤去修改到这个状态,这就叫做原型模式。
主要使用的方法是,将原型对象指针传给一个类,类里面对这个原型对象指针做深拷贝(拷贝构造函数),此时就会构建出一个新的同样状态的对象,创建就完成了。

注:实际工程中基本不用

构建器模式

将一个复杂对象的构建和表示分析,使用同样的构建流程(稳定)可以有不同的表现形式(变化)。

父类实现构建的流程(稳定的部分),子类实现流程中的步骤(不同的子类步骤实现内容不同),类似于模板方法,但是模板父类中的函数或者流程是功能函数,而构建器中的函数为构造函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值