浅谈23种设计模式算法
类之间的关联关系:在使用Java、C#和C++等编程语言实现关联关系时,一般将一个类做为另外一个类的属性。
(1)双向关联,两个类互相为各自的属性,好比顾客类Customer和商品类Product,顾客拥有商品,商品与某个顾客相关联。
(2)单向关联,一个类做为另外一个类的属性,顾客Customer拥有地址Address,UML图用带箭头的直线表示,由Customer指向Address。
(3)自关联,此类的属性对象类型属于该类自己,例如节点类Node的成员又是节点对象。
(4)多重关联,Form类的对象包含多个Button类,一个Button只与一个Form相关联。
(5)聚合关系,是一种特殊的关联关系,强调部分与总体,好比汽车Car和引擎Engine,引擎能够脱离汽车单独存在,可是是汽车的组成部分,UML图中用带空心菱形的直线表示,由汽车指向引擎,表示汽车contains引擎。(Engine类能够在Car类的外部实例化,而后做为参数传入Car类)
(6)组合关系,是一种特殊的关联关系,也强调部分与总体关系,好比头Head和嘴Mouth,Mouth不能脱离Head单独存在,UML图用带实心菱形的直线表示,由Head指向Mouth,表示头has嘴。(Mouth类在Head类的构造函数中实例化,Head销毁则Mouth也销毁)
*组合关系和聚合关系与普通的关联关系主要是语义上的区别,表示关联的程度。编程
类之间的依赖关系:表示某个类的方法使用另外一个类的对象做为参数,UML图用带箭头的虚线表示,由依赖方指向被依赖方。设计模式
泛化关系:即继承关系,UML图中用带空心三角形的直线表示,例如Student类 is-a-kind-of Person类编程语言
接口与实现关系:表示类实现接口中所声明的操做。UML图中用带空心三角形的虚线表示。函数
面向对象设计原则:
(1)单一职责原则:类的职责要单一,不能将太多的职责放在一个类中。
(2)开闭原则:能够在不修改一个软件实体的基础上去扩展其余功能。
(3)里氏代换原则:在软件系统中,一个能够接受基类对象的地方必然能够接受一个子类对象。
(4)依赖倒转原则:针对抽象层编程,不要针对具体类编程。
(5)接口隔离原则:使用多个专门的接口来替代一个统一的接口。
(6)合成复用原则:在系统中尽可能多使用组合和聚合关系,尽可能少使用甚至不使用继承关系。
(7)迪米特法则:一个软件实体对其余实体引用越少越好,或者说若是两个类没必要彼此直接通讯,那么两个类就不该当发生直接的相互做用,而是引入一个第三者发生间接交互。
spa
设计模式定义:设计模式是一套被反复使用、多数人知晓的、通过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计
五种对象建立型模式:
1.工厂方法模式
工厂父类负责定义建立产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样作的目的是将产品类的实例化操做延迟到工厂子类中完成,即经过工厂子类来肯定究竟应该实例化哪个具体产品类。
2.抽象工厂模式
提供一个建立一系列相关或依赖对象的接口,而无须指定他们具体的类。
3.建造者模式
将一个复杂对象的构建与它的表示分离,使得一样的构建过程能够建立不一样的表示。建造者模式是一步一步建立一个复杂的对象,它容许用户只经过指定复杂对象的类型和内容就能够构建它们,用户不须要知道内部的具体构建细节。
4.原型模式
用原型实例指定建立对象的种类,而且经过复制这些原型建立新的对象。原型模式容许一个对象再建立另一个可定制的对象,无须知道任何建立的细节。原型模式的基本工做原理是经过将一个原型对象传给那个要发动建立的对象,这个要发动建立的对象经过请求原型对象复制原型来实现建立过程。
5.单例模式
单例模式确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行建立这个实例;三是它必须自行向整个系统提供这个实例。代理
七种结构型模式:
1.适配器模式
将一个接口转换成客户但愿的另外一个接口,适配器模式使接口不兼容的那些类能够一块儿工做。
2.桥接模式
将抽象部分与它的实现部分分离,使它们均可以独立地变化。
3.组合模式
组合多个对象造成树形结构以表示“总体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具备一致性。
4.装饰模式
动态地给一个对象增长一些额外的职责,就增长对象功能来讲,装饰模式比生成子类实现更为灵活。
5.外观模式
外部与一个子系统通讯必须经过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子接口更加容易使用。
6.享元模式
运用共享技术有效地支持大量细粒度对象的复用。系统只使用少许的对象,而这些对象都很类似,状态变化很小,能够实现对象的屡次复用。
7.代理模式
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。日志
十一种行为型模式:
1.职责链模式
避免请求发送者与接收者耦合在一块儿,让多个对象都有可能接收请求,将这些对象链接成一条链,而且沿着这条链传递请求,直到有对象处理它为止
2.命令模式
将一个请求封装为一个对象,从而使咱们可用不一样的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操做。
3.解释器模式
定义语法的文法,而且创建一个解释器来解释语言中的句子,这里的“语言”意思是使用规定格式和语法的代码。
4.迭代器模式
提供一种方法来访问聚合对象,而不是暴露这个对象的内部表示。
5.中介者模式
用一个中介对象来封装一系列的对象交互,中介者使各对象不须要显示地相互引用,从而使其耦合松散,并且能够独立地改变它们之间的交互。
6.备忘录模式
在不破坏封装的前提下,捕捉一个对象的内部状态,并在该对象以外保存这个状态,这样能够在之后将对象恢复到原先保存的状态。
7.观察者模式
定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆获得通知并自动更新。
8.状态模式
容许一个对象在其内部状态改变时改变它的行为,对象看起来彷佛修改了它的类。
9.策略模式
定义一系列算法,将每个算法封装起来,并让他们能够相互替换。
10.模板方法模式
定义一个操做中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类能够不改变一个算法的结构便可重定义该算法的某些特定步骤。
11.访问者模式
表示一个做用于某对象结构中的各元素的操做,它使咱们能够在不改变各元素的类的前提下定义做用于这些元素的新操做。orm