设计模式--大纲
来源:互联网 发布:陈华编程学院 编辑:程序博客网 时间:2024/05/16 05:09
1.设计模式中类与类之间的6种关系
在面向对象的设计模式中,类与类之间主要有6种关系:依赖、关联、聚合、组合、继承、实现。
依赖:类A当中使用了类B,其中类B是作为类A的方法参数、方法中的局部变量、或者静态方法调用。则称类A依赖类B。
关联:类A当中使用了类B,其中类B是作为类A的成员变量。则称类A关联类B。
聚合:聚合关系是关联关系的一种,耦合度强于关联,他们的代码表现是相同的,仅仅是在语义上有所区别:关联关系的对象间是相互独立的,而聚合关系的对象之间存在着包容关系,他们之间是“整体-个体”的相互关系。
组合: 相比于聚合,组合是一种耦合度更强的关联关系。存在组合关系的类表示“整体-部分”的关联关系,“整体”负责“部分”的生命周期,他们之间是共生共死的;并且“部分”单独存在时没有任何意义。
继承:继承表示类与类(或者接口与接口)之间的父子关系。
实现:表示一个类实现一个或多个接口的方法。
尤其注意区别依赖、关联、聚合、组合几种类间关系的联系与区别。一句话总结便是:依赖、关联、聚合、组合四种类间耦合度依次增强。
2.设计模式中的6大原则
在运用面向对象的思想进行软件设计时,需要遵循的六大原则:
1)单一职责原则(Single Responsibility Principle)
2) 里氏替换原则(Liskov Substitution Principle)
3) 依赖倒置原则(Dependence Inversion Principle)
4)接口隔离原则(Interface Segregation Principle)
5) 迪米特法则(Law Of Demeter)
6) 开闭原则(Open Close Principle)
单一职责原则:
说白了,就是一个类只负责一项职责。
里氏替换原则:
子类可以扩展父类的功能,但不能改变父类原有的功能。主要包含以下4层含义:
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
依赖倒置原则:
A.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
B.抽象不应该依赖于具体,具体应该依赖于抽象。
接口隔离原则:
简而言之就是不要建立臃肿的接口,接口中的方法应尽量少,一个类对另一个类的依赖应该建立在最小的接口上,以避免客户依赖(实现)不必要的接口。
迪米特法则:
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。简而言之:只与直接的朋友通信。
开闭原则:
简而言之就是:对扩展开发,对修改关闭。
6大原则总结:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭,用抽象构建框架,用实现扩展细节。
3. 设计模式分类
总体来说设计模式分为三大类:
创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。设计模式之间的关系图如下:
文章转自:http://www.cricode.com/3532.html
关于:设计模式中类的关系,会在之后详细讲解
- 设计模式大纲
- 设计模式--大纲
- java设计模式大纲
- 23种设计模式大纲
- 设计模式使用频率简要大纲
- 工艺设计大纲
- java权限设计大纲
- 数据库设计的范式大纲
- 数据库设计的范式大纲
- 大纲
- 大纲
- 大纲
- 大纲
- 大纲
- 系统设计文档写作大纲简要
- Linux内核设计与实现之大纲
- 项目实施计划及总体设计报告(大纲)
- 流程设计器开发六(大纲视图部分)
- 塔防TDTK 敌人移动到目标转向
- Windows平台下搭建Obcject-C平台
- linux ln 命令使用参数详解(ln -s 软链接)
- slice,splice,substr和substring的区别
- POJ 2393 Yogurt factory(贪心)
- 设计模式--大纲
- linux rtc简介与测试
- nc获取表体所选行的特定列的数据
- AVPlayer的使用,带缓冲
- 退出键盘
- [转]C语言中的堆区和栈区
- iOS开发之微信支付
- Linux系统中MySQL数据库操作命令
- [vb版机房] 添加和删除用户