大话设计模式的一点笔记

本文探讨软件设计的基本原则,如开放-封闭原则、里氏代换原则及多种设计模式,包括建造者模式、观察者模式等。通过实例解释如何有效应用这些原则和模式来提高软件质量。

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

编程有一个原则,就是用尽可能的办法去避免重复。

业务逻辑和界面逻辑分开,让它们之间的耦合度下降,只有分离开,才能打到容易扩展和维护。

面向对象三大特性:封装、继承、多态。

开放-封闭原则:是说软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。即对于扩展是开放的,对修改是封闭的。这样的设计才能面对需求的改变保持相对的稳定,从而使得系统在推出第一个版本后可以不断退出新版本。

里氏代换原则:子类必须能够替换掉他们的父类型。如果定义鸟可以飞,在编程世界里,企鹅不能以父类——鸟的身份出现,因为前提说所有鸟都能飞,而企鹅飞不了,所以,企鹅不能继承鸟类。

建造者模式:主要用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需再定义一个具体的建造者就可以了。

观察者模式(又叫发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。观察者模式所做的工作其实就是在解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体。

状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起里像是改变了其类。

状态模式只要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。

适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

想使用一个已经存在的类,但如果它的接口,也就是它的方法和你的要求不同时,就应该考虑用适配器模式。两个类所做的事情相同或相似,但是具有不同的接口时要使用它。

适配器模式通常是在软件开发后期或者维护期使用。

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

组合模式:将对象组合成梳妆结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式让客户可以一致地使用组合结构和单个对象。

迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。

单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

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

实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用继承。

聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。比方说:大雁和翅膀是合成关系,而一只大雁和雁群是聚合关系。

优先使用对象的合成/聚合关系将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

继承是一种强耦合的结构,父类变,子类就必须变。

在使用继承时,一定要是在’is-a’的关系时在考虑使用,而不是任何时候都去使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值