标签:细节 面向对象语言 方案 迪米特法则 原则 通过 结构 之间 创建型
之前我们有讲过六大设计原则,分别为【单一职责】【里氏替换】【 迪米特法则】【依赖倒置原则】【接口隔离原则】【开闭原则】,这些只能叫原则,叫建议,而并没有实际的招数。
那今天我们来讨论一下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:建造者模式
这个主要针对于一些复杂的工厂方法来说的!
标签:细节 面向对象语言 方案 迪米特法则 原则 通过 结构 之间 创建型
原文地址:https://www.cnblogs.com/loverwangshan/p/10306646.html