码迷,mamicode.com
首页 > 其他好文 > 详细

23种设计模式

时间:2019-01-23 00:11:42      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:细节   面向对象语言   方案   迪米特法则   原则   通过   结构   之间   创建型   

之前我们有讲过六大设计原则,分别为【单一职责】【里氏替换】【 迪米特法则】【依赖倒置原则】【接口隔离原则】【开闭原则】,这些只能叫原则,叫建议,而并没有实际的招数。

那今天我们来讨论一下23种设计模式。设计模式就是:面向对象语言开发过程中,遇到的种种场景和问题,然后提出了解决方案和思路。

沉淀下来的就变成了设计模式,解决具体问题的具体招数,其实说白了就是套路,即是我们站在前辈的肩膀来解决问题。

设计模式分为三大类型:

1:创建型设计模式:关注对象的创建

2:结构型设计模式:关注类与类之间的关系

3:行为型设计模式:关注对象和行为的分离

接下来我们分别来讲讲一下这三类设计模式

 

一:创建性设计模式

看到这个很多人会想,对象的创建难道不就是new()一下,然后就能解决的吗?其实不然,这里面有很多套路,他包含:【单例模式】【原型】【简单工厂】【工厂方法】【抽象工厂】【建造者模式】

1:单例模式:主要应用于构造对象耗时好资源,且很多地方都需要去new,想要避免重复构造的时候可以使用单例模式

A:怎么创建单例?

1:构造函数私有化,避免别人私有化

2:公开的静态方法提供对象的实例

3:全局唯一静态,重用这个变量,保证全局都是这一个

B:单例虽然限制了对象的创建,重用了对象,但是单例是不具有多线程安全性的,所以我们可以通过以下三种方式创建

1:静态变量初始化new

2:静态构造函数中new

3:使用lock加锁new

因为构造一个类的时候,首先先创建静态字段,然后再执行静态构造函数,所以使用静态变量或者静态构造函数进行创建时,只要你使用这个类就会创建这个对象,然后会常驻内存,这些称为饿汗单例,使用lock加锁的称为懒汉单例

C:单例一般运用的场景

单例是保证全局唯一的一个实例,主要是应对一些特殊情况,比如数据库连接池(内置资源),再比如:流水号或者订单号生成器,使用同一个变量保证初始值是同一个!

 

2:原型设计模式

原型设计模式是在单例的基础上面升级了一下,然后把对象从内存的层面复制了一下,然后返回一个新的对象,但是又不走构造函数

注意:原型模式是一个新的对象,新的地址,但是copy仅仅是浅克隆,而不是深克隆,所以有时候需要注意一下

 

3:简单工厂(不属于23种设计模式)

不直接new,然后把对象的创建转移到工厂中,这种是细节没有消失,只是转移了矛盾,并没有消除矛盾,而是把矛盾集中在同一个工厂中

 

4:工厂方法

由于简单工厂集中了矛盾,所以出现了工厂方法,这个仅仅是屏蔽了对象的创建,留下了扩展空间,这个看似和直接new一个业务类相似,但是这样做的好处是屏蔽业务变化的影响,而且留下了创建对象的 扩展空间,完美的遵循了开闭原则(对扩展开放,对修改封闭)

 

5:抽象工厂

创建一组密不可分的对象,屏蔽对象的创建,约束强制保障产品簇,其中我们用到的操作数据库类DbProviderFactory就是一个抽象工厂

抽象工厂对扩展种族比较省事,直接继承抽象类,然后即可,但是如果想要在抽象类中扩展一个新的对象,则会影响到所有的子类,它也被称为倾斜的可扩展性设计

6:建造者模式

这个主要针对于一些复杂的工厂方法来说的!

 

23种设计模式

标签:细节   面向对象语言   方案   迪米特法则   原则   通过   结构   之间   创建型   

原文地址:https://www.cnblogs.com/loverwangshan/p/10306646.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!