趁着9102
年的双12
来临之际,终于下定决定买了一款椅子,本想着买一款老板椅的,可是看看本身的一个打工仔(程序猿)身份仍是买了一款便宜的游戏电竞椅。终于能够把我用25
块钱买的辣鸡胶凳子扔了。特此申明:我买电竞椅是用来打游戏的,不是写代码的,不过用来写文章也不过度吧。git
当组装好椅子并坐上去的那一刻,我仿佛找到了一年前写文章的那个状态。故而在此系列停更的一年半的状况下,继续捡起来写完它。否则该死的群友又会说:github
群友1: J佬,你的教程太监了...
群友2: 基佬,你的教程太监了...
...
迷之复制ing...
...
我:
复制代码
我:谁爱写谁写,我tm不写!
复制代码
好了,不扯了,我但愿在2020
我被消灭以前,我还在继续写...算法
Open-Close Principle
)定义编程
所谓开-闭原则,即指一个软件实体应当对扩展开放,对修改关闭。设计模式
即:给出一个货多个抽象类或接口,规定全部的具体类必须提供方法和属性,做为一个抽象层,这个抽象层尽量的知足全部可能性。故而当咱们须要扩展的时候,这个抽象层就没必要修改,即对应上面的对修改关闭。同时从抽象类或者接口导出一个具体的实现类来改变系统的行为,即对应上面的对扩展开放。bash
做用函数
是为了使程序的扩展性好,易于维护和升级ui
优势spa
Liskov Substitution Principle
)定义设计
所谓里氏代换原则原则,即指的是任何基类出现的地方,其子类必定能出现,反之则不成立。它是对开-闭原则的补充
做用
是对实现抽象化的具体步骤的规范。由于,实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现。
Dependence Inversion Principle
)定义
- 要针对接口编程,不要针对实现编程
- 要依赖与抽象,不要依赖与具体
做用
强调一个系统内实体关系之间的灵活性。由于它是开-闭原则的基础
Interface Segregation Principle
)定义
所谓接口隔离原则,即指使用多个专门的接口比使用一个总接口要好。换言之,一个类对另外一个类的依赖应当是创建在最小接口上的
做用
下降类与类之间的耦合度,下降依赖
例子
一我的天天须要吃早餐、吃午餐、吃晚饭,睡午觉、可能睡个回笼觉、正常睡觉。这里就把吃饭做为一个接口,把睡觉做为一个接口,里面去分别实现具体的方法。
interface Sleep{
fun sleepMorning()
fun sleepNoon()
fun sleepNight()
}
interface Eat{
fun eatMorning()
fun eatNoon()
fun eatNight()
}
复制代码
Demeter Principle
)定义
- 迪米特法又呗称为最少知识原则,即一个对象应当对其余对象尽量少得了了解。换言之,一个实体应当尽可能少地与其余实体之间发生相互做用
做用
使得系统功能模块相对独立
Composite Reuse Principle
)定义
所谓合成复用原则,即指尽可能使用合成/聚合的方式,而不是使用继承。
做用
在一个新的对象中使用一些已有的对象,使之称为新对象的一部分,新的对象经过向这些对象委派从而达到复用已有功能的目的。
所谓设计模式(Design patterns
)表明了一中软件设计的最佳实践,一般被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程当中面临的通常问题的解决方案。这些解决方案是众多软件开发人员通过至关长的一段时间的试验和错误总结出来的。
在面向对象的编程中使用模式化方法研究的开创性著做是 《Design Patterns - Elements of Reusable Object-Oriented Software
》,中文译名是:《设计模式 - 可复用的面向对象软件元素》,该书首次提到了软件开发中设计模式的概念。该书的做者共四位,合称Gang of Four或GoF
设计模式是一套被反复使用的、多数人知晓的、通过分类编目的、代码设计经验的总结。
设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石同样。项目中合理地运用设计模式能够完美地解决不少问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被普遍应用的缘由。
- 提高软件系统的可维护性。但愿咱们设计的是可扩展的,具备灵活性以及可插入性的系统。
- 提高代码的可复用性。让代码更容易被他人理解、保证代码可靠。
设计模式分为三类,分别是建立型模式、结构型模式、行为型模式。
建立型模式是对类的实例化过程的抽象化,即提供了一种在建立对象的同时隐藏建立逻辑的方式,而不是使用
new
运算符直接实例化对象。这使得程序在判断针对某个给定实例须要建立哪些对象时更加灵活。
建立型模式包括:
工厂方法模式(Factory Method Pattern
)
它是类的建立模式,它定义一个建立产品对象的接口,将实际的建立工做交给其子类。其中,工厂方法模式又被称为虚拟构造子模式或多态性工厂模式
抽象工厂模式(Abstract Factory Pattern
)
是全部形态的工厂模式中最为抽象和最具通常性的一种形态。它的目的是向客户端提供一个接口,使客户端在没必要指定具体产品的状况下,建立多个产品族中的产品对象。
单例模式(Singleton Pattern
)
确保一个类只有一个实例,并且是自行实例化并向整个系统提供这个实例。单例模式通常有
7
种实现方式,在后续的章节中会一一实现。
建造者模式(Builder Pattern
)
能够将一个产品的内部表象与产品的生产过程分割开来,从而能够是一个建造过程生成具备不用的内部表象的产品对象。
原型模式(Prototype Pattern
)
经过给出一个原型对象来指明说要建立的对象的类型,而后用复制这个原型对象的方法建立出更多同类型的对象。
结构型模式是关注类和对象的组合。用来组合接口和定义组合对象得到新功能的方式。
结构型模式包括:
适配器模式(Adapter Pattern
)
把一个类的接口变换成客户端所期待的另外一种接口,从而使本来因接口不匹配而没法工做的两个类可以一块儿正常工做。它分为类的适配器模式和对象的适配器模式。
桥接模式(Bridge Pattern
)
目的是将抽象化与实现化脱藕,使两者能够独立的变化。
组合模式(Composite Pattern
)
- 又叫部分总体模式,是用于把一组类似的对象看成一个单一的对象。
- 依据树形结构来组合对象,用来表示部分以及总体层次。
- 式建立了一个包含本身对象组的类。该类提供了修改相同对象组的方式。
装饰器模式(Decorator Pattern
)
以客户端透明的方式扩展对象的功能,是继承关系的一种替代方案。其中,装饰模式又被称为包装模式。
外观模式(Facade Pattern
)
是隐藏系统的复杂性,并向客户端提供了一个客户端能够访问系统的接口。它涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
享元模式(Flyweight Pattern
)
是对象的结构模式,目的是以共享的方式高效地支持大量的细粒度对象,它可以作到共享的关键是区份内蕴状态与外蕴状态。更详细说明会在后续的章节出说明。
代理模式(Proxy Pattern
)
是对象的结构模式,目的是为一个对象提供一个代理对象,并由代理对象控制原始对象的引用。其中,代理模式分为静态代理和动态代理两种模式。
这些设计模式特别关注对象之间的通讯。
行为型模式包括:
责任链模式(Chain of Responsibility Pattern
)
- 为请求建立了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦
- 它一般每一个接收者都包含对另外一个接收者的引用。若是一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
命令模式(Command Pattern
)
- 是一种数据驱动的设计模式
- 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找能够处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
解释器模式(Interpreter Pattern
)
提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文
迭代器模式(Iterator Pattern
)
- 它又被称为游标模式
- 它是对象的行为模式,目的是能够顺序地访问一个汇集中的元素而没必要暴露汇集的内部表象。
中介者模式(Mediator Pattern
)
下降多个对象和类之间的通讯复杂性。提供了一个中介类,该类一般处理不一样类之间的通讯,并支持松耦合,使代码易于维护
备忘录模式(Memento Pattern
)
保存一个对象的某个状态,以便在适当的时候恢复对象
观察者模式(Observer Pattern
)
- 它又被称为发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。
- 它定义了一种一对多的依赖关系,让多个观察者同时监听一个主题对象(被观察者),当这个主题对象发生变化时,会通知全部观察者对象,让他们可以自动更新本身
状态模式(State Pattern
)
容许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
策略模式(Strategy Pattern
)
是针对一组算法,将每个算法封装到具备公共接口的独立的类中。从而可使得他们能够相互的替换。
模板模式(Template Pattern
)
把一系列含有公共逻辑的类抽象成一个抽象类,将这部分公共逻辑具体方法以及具体构造子的形式实现。而后声明一系列抽象函数来迫使其子类实现剩余的逻辑。不一样的子类能够以不一样的方式实现这些抽象方法。其实提及来很复杂,可是就是咱们写代码常常会用到的基类。好比说
BaseActivity
、BaseFragment
等...
访问者模式(Visitor Pattern
)
使用了一个访问者类,它改变了元素类的执行算法。经过这种方式,元素的执行算法能够随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就能够处理元素对象上的操做。
上面的知识几乎全是书面性文字,是对设计模式一个总的概述,关于设计模式的介绍、做用等你们了解便可。不过设计模式的六大原则是必定要掌握的,毕竟设计模式几乎都遵循上面的原则。掌握设计模式的分类。后续会为你们一一详解每一种设计模式的用法和场景。
若是各位大佬看了以后感受还阔以,就请各位大佬随便star
一下,您的关注是我最大的动力。
个人我的博客:Jetictors
个人github:Jetictors