[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
<>6 模块设计
<>面向对象的设计原则
<>单一职责原则
* 定义: 在软件系统中一个类只负责一个功能领域的相应职责
* 一个类承担的指责越多,被复用的可能性就越小。
* 类的指责体现在两个方面:数据职责、行为职责
* 高内聚、低耦合
单一职责原则实例:
转单一职责
<>开闭原则
* 定义:一个软件实体,应该对扩展开放,对修改关闭。 模块可以在不被修改的前提下被扩展,实现在不修改源码的情况下改变这个模块的行文。
* 软件实体可以指一个软件模块、一个有多个类组成的局部结构或一个独立的类。
* 关键: 抽象化
* 使用开闭原则,对灵活性喝可扩展性进行评价
实例:
根据开闭原则修改
<>里氏代换原则
* 一个软件如果使用的是一个父类的话, 那么一定适用于其子类, 而察觉不出父类对象和子类对象的区别。 也即是说,在软件里面, 把父类替换成它的子类,
程序的行为不会有变化。
* 子类型必须能够替换掉它们的父类型。
当满足以下条件的时候,一个子类对父类就是可替换的:
* 子类支持父类的所有方法,并且他们的签名是兼容的
* 子类的方法必须满足父类方法的规格说明。两个类的犯法不一定要完全相同,但是子类必须不违反父类放大的前置条件和后置条件。
* 子类必须保留父类中声明了的所有性质。
主要用途:确定社么时候一个而对象可以安全的被另一个对象所替换。
<>倒转依赖原则
* 定义: 高层模块不应依赖底层模块,他们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
* 要针对接口编程,不要针对实现编程
* 代码要依赖抽象的类,而不依赖具体的类
* 常用实现:在代码中使用抽象地类,将具体的类放在配置文件中
* 关键: 抽象耦合
实例;
由于需求的变化,该系统可能需要增加新的数据源或者新的文件格式,每增加一个新的类型的数据源或者新的类型的文件格式,客户类MainClass都需要修改源代码,以便使用新的类,违背了开闭原则。现使用依赖倒转原则对其进行重构。
<>合成复用原则
* 尽量使用对象组合而不是进程来达到复用目的
*
合成复用原则就是指在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的
* 继承复用: 简单,易于扩展。破环系统的封装性,从基类继承而来的是实现时静态的,不能在运行时改变,缺少灵活性。(白箱复用)
* 组合/聚合复用:耦合度相对较低,选择性地调用成员对象,可以在运行时动态进行。(黑箱复用)
* 组合/聚合:是系统更加灵活,降低类与类的耦合度。
<>迪米特法则
* 每个软件单位对其他的单位都只有最少的知识,并且局限于那些和本单位密切相关的软件单位。
* 一个软件实体应当尽可能少的与其他实体发生相互作用。