面向对象编程学习笔记(持续更新...)

版权声明: https://blog.csdn.net/guimaxingtian/article/details/80989409

OO设计原则:
(1)SRP:The single responsibility principle单一职责
只能让一个类有且仅有一个职责;
(2)DRY:Don’t repeat yourself principle
通过抽取公共部分放置在一个地方避免代码重复;
(3)OCP:Open-Close Principle开闭原则
类应该对扩展开放,对修改关闭;
(4)LSP:The Liskov substitution principle里氏替换原则
子类必须能够替换基类,所有引用基类的地方必须能够透明地使用其子类的对象
(5)DIP:依赖倒置原则
高层模块不应该依赖于底层模块,二者都应该依赖于抽象,要针对接口编程,不要针对实现编程,抽象不应该依赖于细节,细节应该依赖于抽象
(6)ISP:接口隔离原则
不应该强迫客户程序依赖它们不需要的使用的方法,接口的设计应该遵循最小接口原则,不要把用户不使用的方法塞进同一个接口里。
(7)Composite/Aggregate Reuse Principle(合成/聚合复用原则CARP)
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过这些向对象的委派达到复用已有功能的目的.这个设计原则有另一个简短的表述:要尽量使用合成/聚合,尽量不要使用继承.
(8)迪米特法则

常说的OO五大原则就是指其中的:

1、单一职责原则;

2、开放闭合原则;

3、里氏替换原则;

4、依赖倒置原则;

5、接口隔离原则。

设计模式:
创建型模式: 工厂方法模式 : 可以看做抽象工厂的一种特例,一个工厂只生产一种产品
抽象工厂模式 : 一个工厂可以生产同一品类的多种产品
单例模式 : 利用构造函数为private,同时声明一个public的返回instance函数
原型模式 : 主要利用拷贝构造函数(注意浅拷贝和深拷贝,深拷贝相当于重新开辟一个新的对象,浅拷贝也叫位拷贝,对于动态开辟堆内存的对象只是拷贝内存地址
建造者模式 : 通过在导向者类中定义一个建造者,使用多态可以创建建造者派生的其他建造者的建造对象。

策略模式: 策略模式通常有三种方法: (1)通过参数(策略对象)指定具体策略;(2)通过标签指定具体策略;(3)通过类模板来实现;

外观模式: 对客户屏蔽子系统组件,实现子系统与客户之间的松耦合关系,如果应用需要,并不限制使用子系统类;
组合模式: 类似于osg中场景的组织方式,可以理解为一个属性结构,分为root节点(可添加其他节点)和叶节点(不可再添加子节点),关于节点的删除可以使用智能指针管理,在生命周期里的计数管理;

代理模式: 为其他对象提供一种代理以控制对这个对象的访问
(1)远程代理:
(2)虚拟代理:
(3)安全代理:
(4)智能指引:参考c++智能指针实现

享元模式: 对于大量细粒度的对象,内在属性可以共享,区分在于外在属性,外在属性可以提取出来,存放在单独的容器中

桥接模式: 将抽象部分与它的实现部分分离,使它们都可以独立的变化,是设计模式中比较难理解和实现的一个模式

装饰模式: 动态地给一个对象添加一些额外的职责,常见做法是将被装饰的对象作为参数传给装饰器对象的构造函数以实现装饰目的。

备忘录模式: 创建一个备忘录类,可以保存一些特定对象的特性值,然后将这个备忘录类作为桥梁进行状态的传输。

中介者模式: 用一个中介对象来封装一系列的对象交互,比如房屋中介的例子,租房信息是通过中介对象进行传输的。

职责链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,比如员工申请加薪的例子,需要一级一级往上审批。

观察者模式: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,比如博客订阅的例子,当博主发表新文章的时候,博主状态发生改变,那订阅者就会收到通知,具体可以在被观察者类中添加一个存放观察者对象的列表。

状态模式: 允许一个对象在其内部状态改变时改变它的行为,对象看起来修改了它的类,有两种情况:
(1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为;
(2)一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。
比如一场战争在不同时期会有不同的状态,需要根据时期去动态地改变相应的状态。

猜你喜欢

转载自blog.csdn.net/guimaxingtian/article/details/80989409
今日推荐