包括7大设计原则和23大设计模式。html
这7大设计原则不只是23大设计模式要去遵照的,也是咱们日常开发过程当中要时刻去遵照的准则,因此说很是很是重要。git
1,单一职责原则github
1)定义:就一个类而言,应该仅有一个引发它变化的缘由。简而言之,就是功能要单一。
2)若是一个类承担的职责过多,就等于把这些职责耦合在一块儿,一个职责的变化可能会削弱或者抑制这个类完成其它职责的能力。这种耦合会致使脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。(敏捷软件开发)。
3)软件设计真正要作的许多内容,就是发现职责并把那些职责相互分离。
4)单一职责原则能够看作是低耦合、高内聚在面向对象原则上的引伸,将职责定义为引发变化的缘由,以提升内聚性来减小引发变化的缘由。责任过多,引发它变化的缘由就越多,这样就会致使职责依赖,大大损伤其内聚性和耦合度。算法
2,开放关闭原则编程
1)定义:就是说软件实体(类,方法等等)应该能够扩展(扩展能够理解为增长),可是不能在原来的方法或者类上修改,也能够这样说,对增长代码开放,对修改代码关闭。
2)两个特征: 对于扩展(增长)是开放的,由于它不影响原来的,这是新增长的。对于修改是封闭的,若是老是修改,逻辑会愈来愈复杂。
3)开放封闭原则是面向对象设计的核心思想。遵循这个原则能够为咱们面向对象的设计带来巨大的好处:可维护(维护成本小,作管理简单,影响最小)、可扩展(有新需求,增长就好)、可复用(不耦合,可使用之前代码)、灵活性好(维护方便、简单)。开发人员应该仅对程序中出现频繁变化的那些部分作出抽象,可是不能过激,对应用程序中的每一个部分都刻意地进行抽象一样也不是一个好主意。拒毫不成熟的抽象和抽象自己同样重要。设计模式
3,里氏代替原则ui
1)定义:子类型必须可以替换掉它们的父类型。更直白的说,里氏代替原则是实现面向接口编程的基础。
2)任何基类能够出现的地方,子类必定能够出现,因此咱们能够实现面向接口编程。 里氏代替原则是继承复用的基石,只有当子类能够替换掉基类,软件的功能不受到影响时,基类才能真正被复用,而子类也可以在基类的基础上增长新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,因此里氏代换原则是对实现抽象化的具体步骤的规范。编码
4,依赖倒置原则spa
1)定义:高层模块不该该依赖低层模块,二者都应该依赖其抽象;抽象不该该依赖细节,细节应该依赖抽象。简单说就是,咱们要针对接口编程,而不要针对实现编程。
2)高层模块不该该依赖低层模块,两个都应该依赖抽象,由于抽象是稳定的。抽象不该该依赖具体(细节),具体(细节)应该依赖抽象。
3)依赖倒置原则其实能够说是面向对象设计的标志,若是在咱们编码的时候考虑的是面向接口编程,而不是简单的功能实现,体现了抽象的稳定性,只有这样才符合面向对象的设计。设计
5,接口隔离原则
1)定义:指的是使用多个专门的接口比使用单一的总接口要好。也就是说不要让一个单一的接口承担过多的职责,而应把每一个职责分离到多个专门的接口中,进行接口分离。过于臃肿的接口是对接口的一种污染。
2)使用多个专门的接口比使用单一的总接口要好。
3)一个类对另一个类的依赖性应当是创建在最小的接口上的。
4)一个接口表明一个角色,不该当将不一样的角色都交给一个接口。没有关系的接口合并在一块儿,造成一个臃肿的大接口,这是对角色和接口的污染。
5)不该该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,若是强迫用户使用它们不使用的方法,那么这些客户就会面临因为这些不使用的方法的改变所带来的改变。
6)接口隔离原则告诉咱们,在作接口设计的时候,要尽可能设计的接口功能单一,功能单一,使它变化的因素就少,这样就更稳定,其实这体现了高内聚,低耦合的原则,这样作也避免接口的污染。
6,组合复用原则
1)定义:就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。新对象经过向这些对象的委派达到复用已用功能的目的。简单地说,就是要尽可能使用合成/聚合,尽可能不要使用继承。
2)要使用好组合复用原则,首先须要区分”Has—A”和“Is—A”的关系。 “Is—A”是指一个类是另外一个类的“一种”,是属于的关系,而“Has—A”则不一样,它表示某一个角色具备某一项责任。致使错误的使用继承而不是聚合的常见的缘由是错误地把“Has—A”当成“Is—A”.例如:鸡是动物,这就是“Is-A”的表现,某人有一个手枪,People类型里面包含一个Gun类型,这就是“Has-A”的表现。
3)组合/聚合复用原则可使系统更加灵活,类与类之间的耦合度下降,一个类的变化对其余类形成的影响相对较少,所以通常首选使用组合/聚合来实现复用;其次才考虑继承,在使用继承时,须要严格遵循里氏替换原则,有效使用继承会有助于对问题的理解,下降复杂度,而滥用继承反而会增长系统构建和维护的难度以及系统的复杂度,所以须要慎重使用继承复用。
7,迪米特法则
1)定义:迪米特法则又叫最少知识原则(Least Knowledge Principle,LKP),指的是一个对象应当对其余对象有尽量少的了解。也就是说,一个模块或对象应尽可能少的与其余实体之间发生相互做用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。
2)关于迪米特法则其余的一些表述有:只与你直接的朋友们通讯;不要跟“陌生人”说话。
3)外观模式(Facade Pattern)和中介者模式(Mediator Pattern)就使用了迪米特法则。
4)迪米特法则的初衷是下降类之间的耦合,实现类型之间的高内聚,低耦合,这样能够解耦。可是凡事都有度,过度的使用迪米特原则,会产生大量这样的中介和传递类,致使系统复杂度变大。因此在采用迪米特法则时要反复权衡,既作到结构清晰,又要高内聚低耦合。
建立型设计模式提供了一种在建立对象的同时隐藏建立逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例须要建立哪些对象时更加灵活。
建立型设计模式包括如下5种:
设计模式系列1:单例模式(Singleton Pattern)
设计模式系列2:工厂方法模式(Factory Method Pattern)
设计模式系列3:抽象工厂模式(Abstract Factory Pattern)
设计模式系列4:建造者模式(Builder Pattern)
设计模式系列5:原型模式(Prototype Pattern)
结构型设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象得到新功能的方式。
结构型设计模式包括如下7种:
设计模式系列6:适配器模式(Adapter Pattern)
设计模式系列7:桥接模式(Bridge Pattern)
设计模式系列8:装饰模式(Decorator Pattern)
设计模式系列9:组合模式(Composite Pattern)
设计模式系列10:外观模式(Facade Pattern)
设计模式系列11:享元模式(Flyweight Pattern)
设计模式系列12:代理模式(Proxy Pattern)
行为型设计模式主要讨论的是在不一样对象之间划分责任和算法的抽象化的问题。
行为型设计模式包括如下11种:
设计模式系列13:模板方法模式(Template Method Pattern)
设计模式系列14:命令模式(Command Pattern)
设计模式系列15:迭代器模式(Iterator Pattern)
设计模式系列16:观察者模式(Observer Pattern)
设计模式系列17:中介者模式(Mediator Pattern)
设计模式系列18:状态模式(State Pattern)
设计模式系列19:策略模式(Stragety Pattern)
设计模式系列20:责任链模式(Chain of Resp Pattern)
设计模式系列21:访问者模式(Vistor Pattern)
设计模式系列22:备忘录模式(Memento Pattern)
设计模式系列23:解释器模式(Interpreter Pattern)
Github地址:https://github.com/mcgrady525/GettingStarted.DesignPattern