设计模式学习笔记(一) 面向对象设计模式与原则

本文介绍了面向对象设计模式的基本概念及其在C#中的应用。强调了设计模式在提高代码复用性和应对需求变化方面的重要性,并概述了几项关键的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容为学习李建忠老师之《C#面向对象设计模式纵横谈》系列课程的第一讲之笔记。

每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。
             ——Christopher Alexander

设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。
面向对象设计模式描述了面向对象设计过程中、特定场景下,类与相互通信的对象之间常见的组织关系。包括它们的角色、职责、协作方式几个方面。

面向对象设计模式是“好的面向对象设计”,所谓“好的面向对象设计”是那些可以满足“应对变化,提高复用”的设计。

软件不可能彻底的“工程化”。敏捷开发提出“源代码设计”的思想。

面向对象设计模式不象算法技巧,可以照搬照用,它是建立在对“面向对象”纯熟、深入理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握“面向对象”!

各种面向对象编程语言相互有别,但都能看到它们对面向对象三大机制的支持,即“封装、继承、多态”。封装是指隐藏内部实现,继承是指复用现有代码,多态是指改写对象行为。使用面向对象编程语言,如C#,可以推动程序员以面向对象的思维来思考软件设计结构,从而强化面向对象的编程范式。C#是一门支持面向对象编程的优秀语言,包括:各种级别的封装支持,单实现继承+多接口实现;抽象方法与虚方法重写。

对象是什么?
从概念层面讲,对象是拥有某种责任的抽象。
从规格层面讲,对象是一系列可以被其它对象使用的公共接口。
从语言实现层面来看,对象封闭了代码和数据(即行为和状态)。

原则:

1)针对接口编程而不是针对实现编程。客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。

2)优先使用对象组合,而不是类继承。类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性。子类父类耦合度高。而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

3)封装变化点。使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。


使用重构得到模式——设计模式的应用不宜先入为主,一上来就使用设计模式是对设计模式的最大误用。没有一步到位的设计模式。敏捷软件开发实践提倡的“Refactoring to Patterns”是普遍公认的最好的使用设计模式的方法。


更具体的设计原则
1)单一职责原则(SRP):一个类应该仅有一个引起它变化的原因。
2)开放封闭原则(OCP):类模块应该是可“扩展”的,但是不可“修改”的。(对扩展开放,对更改封闭)。
3)Liskov替换原则(LSP):子类必须能够替换它们的基类。
4)依赖倒置原则(DIP):高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
5)接口隔离原则(ISP):不应该强迫客户程序依赖于它们不用的方法。

模式分类

从目的分:创建型(Creational),负责对象创建。结构型模式(Structural),负责类与对象间的组合。行为型(Behavioral),类与对象交互中的职责分配。

从范围分,类模式处理类与子类的静态关系,对象模式处理对象间的动态关系。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值