浅谈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)迪米特法则:一个软件实体对其他实体引用越少越好,或者说如果两个类不必彼此直接通信,那么两个类就不应当发生直接的相互作用,而是引入一个第三者发生间接交互。

设计模式定义:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

五种对象创建型模式:

1.工厂方法模式

  工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

2.抽象工厂模式

  提供一个创建一系列相关或依赖对象的接口,而无须指定他们具体的类。

3.建造者模式

  将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

4.原型模式

  用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制原型来实现创建过程。

5.单例模式

  单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

七种结构型模式:

1.适配器模式

  将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。

2.桥接模式

  将抽象部分与它的实现部分分离,使它们都可以独立地变化。

3.组合模式

  组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。

4.装饰模式

  动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。

5.外观模式

  外部与一个子系统通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子接口更加容易使用。

6.享元模式

  运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。

7.代理模式

  给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

十一种行为型模式:

1.职责链模式

  避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止

2.命令模式

  将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。

3.解释器模式

  定义语法的文法,并且建立一个解释器来解释语言中的句子,这里的“语言”意思是使用规定格式和语法的代码。

4.迭代器模式

  提供一种方法来访问聚合对象,而不是暴露这个对象的内部表示。

5.中介者模式

  用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

6.备忘录模式

  在不破坏封装的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。

7.观察者模式

  定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并自动更新。

8.状态模式

  允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。

9.策略模式

  定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。

10.模板方法模式

  定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

11.访问者模式

  表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

时间: 2024-10-09 08:58:19

浅谈23种设计模式的相关文章

<转>经典:从追MM谈Java的23种设计模式

设计模式做为程序员的“内功心法”,越来越受到.net 社区的重视,这种变化是很可喜的,Java社区走在了我们的前面,但这种状况 也许有一天会发生改变. 从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅的Factory. 工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修

Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

0. Java开发中的23种设计模式详解(转)

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

23种设计模式全解析

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 总原则:开闭原则(Open C

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体

23种设计模式(转)

设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

【转】23种设计模式简介

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40031567 今天来对这23种设计模式做个总结.咱使用设计模式的目的是为了可重用代码.让代码更容易被他人理解.保证代码可靠性,当然设计模式并不是万能的,项目中的实际问题还有具体分析.咱不能为了使用设计模式而使用,而是在分析问题的过程中,想到使用某种设计模式能达到咱需要的效果,而且比不使用设计模式更有优势,那么咱该考虑使用设计模式了. 一.设计模式的一般分类 创建型(Creator)模式(

Java开发中的23种设计模式

一.设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 其实还有两类:并发型模式和线程池模式.用一个图片来整体描述一下: 二.设计模式的六大原则 1.开闭原则(Open Clo

(转)java 23种设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周