【设计模式】-创建型模式

前言:

  设计模式按照各个模式不同的用途,分为三大类—创建型模式,结构型模式和行为型模式;


创建型模式:

  提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用new运算直接实例化对象,也也使得程序在判断针对某个给定的实例需要创建哪些对象时更加灵活;

1、简单工厂模式

通过动态实例化相关类的方式,达到松耦合的目的,封装了对象的创建,违背了开放-封闭的原则;
  • 优点:可以选择动态实例化的类

2、工厂方法模式

简单工厂模式的进一步抽象和推广,定义一个用于创建对象的接口,根据子类的变化决定实例化哪一个类,使其创建过程延迟到子类进行;
  • 实例:周五是我们改善生活的日子哈,想吃红烧鱼啦,我们就可以去市场上买两条回去自己做,那如果突然又想吃烤鸭了,而恰巧市场上没有,这个时候我们就需要告诉老板,增加烤鸭这一产品,同时也需要增加烤鸭这一工厂类;
  • 优点:克服了简单工厂违背开闭原则的缺点,扩展性高,增加一个新的产品,只需要增加相应的类工厂就行,不用考虑具体的实现;
  • 缺点:每增加一个产品就需要增加一个产品工厂的类,增加了额外开发量;

3、抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,无需指定他们具体的类,每个生成的工厂都能按照工厂模式提供相对应的对象;
  • 实例:搬了新家很多东西需要规整,鞋子也不例外需要购买鞋架,那么我们购买的鞋架鞋架-具体工厂,同时也是鞋架类这一-抽象工厂中的某一个,而我们摆放在鞋架上的鞋子也就是工厂里的具体产品对象;
  • 优点:易于交换产品系列,具体的创建实例过程与客户端分离,通过抽象接口操纵实例,产品的具体类名也被具体工厂实现分离,不会出现在客户代码中;良好的运用了开放-封闭原则和依赖倒转原则
  • 缺点:不易扩展,增加一个系列的表或产品,既需要增加类,又需要增加工厂

4、单例模式

保证一个类仅有一个实例,并提供一个访问他的全局访问点,这个类可以保证没有其他实例可以被创建,并且可以提供一个访问该实例的方法;
  • 实例:一山不能容二虎的既视感吧,就像之前敲机房的时候,我们只需要一个登陆窗体,也就是一个访问点,通过输入不同的账号和密码来获取相应实例的访问;
  • 优点:可以保证唯一的实例,类封装的唯一实例,严格控制客户访问及访问时间–对唯一实例的受控访问;
  • 缺点:没有接口,不能继承,与单一原则相冲突,
  • 实现方式:懒汉式—适用于多线程单例、饿汉式

5、原型模式

从一个对象在创建另一个可定制的对象,而且不需要知道任何创建的细节;实现原型接口,该接口用于当前对象的克隆,当直接创建对象的代价比较大时,可采用这种模式
  • 实例:爱吃快餐的伙伴们会注意到,肯德基和麦当劳的鸡翅,鸡腿,鸡排等每一个大小,味道等都是一致的,每一次都是一样的,这是为什么呢,上学期期末大作业中,查阅资料后了解到,他们都有相当严格的管理规定,每一样东西放几克都是有着严格的标准的,根据这一标准食物进行制作,这样才使得每次的鸡腿大小和味道都是相同无差的;
  • 优点:性能提高
  • 缺点:每一个类都需要配备一个克隆方法,而克隆方法位于类的内部,当对类进行改变时,需要修改源代码,与开闭原则相违背;

6、建造者模式–生成器模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;不需要关注过程和细节,即不需要关系具体实现过程
  • 用途:用于创建一些复杂的对象,这些对象内部构建间的构造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化; 当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用;
  • 实例:这里还是以肯德基和麦当劳为例,套餐是一个复杂对象,它一般包含主食(如汉堡、肌肉块,鸡排等)和饮料(如果汁、可乐等)等,不同的套餐有不同的组成部分,而服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给我们这些顾客;
  • 优点:建造代码与表示代码分离,建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以啦;易扩展,便于风险控制
  • 缺点:产品必须有共同点,范围局限;内部变化复杂会增加建造类;
  • 与工厂模式想比:更关注与零件装配的顺序;

小结:

  放在生活中的实例中理解相对而言更容易接受和理解;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值