设计模式简介

一、 理解面向对象编程

对象:

1
2
3
1.开发的应用程序内的实体
2.实体直接可以通过交互来解决现实世界的问题
例: Person是实体,而Car也是实体。Person可以驾驶Car从一个地方到另一个地方

类:类可以帮助开发人员表示现实世界中的实体

1
2
3
1.类可以定义对象的属性和行为。属性是数据成员,行为由成员函数表示
2.类包含构造函数。这些函数的作用是为对象提供初始状态
3.类就像模板一样,非常易于重复使用

方法:

1
2
1.他们表示对象的行为
2.方法可以对属性进行处理,从而实现所需的功能

二、面向对象编程的主要概念

1、封装  

1
2
3
1.对象的行为对于外部世界来说是不可见的,或者说对象的状态信息是私密的
2.客户端不能通过直接操作来改变对象的内部状态。想反,客户端需要通过发送消息来请求对象改变其内部状态
3.Python没有提供封装的关键字,当时在变量或函数前缀加上__,可以将其访问属性变为私有

2、多态

1
多态有两种类型:1.对象根据输入参数  提供方法的不同实现2.不同类型的对象可以使用相同的接口   

3、继承

1
2
3
1.继承表示一个类可以继承父类的功能(大部分)
2.继承被描述为一个重用基类中定义的功能并允许对原始软件的实现进行独立扩展的选项(父类重写)
3.继承可以利用不同的对象之间的关系建立层次结构,并且支持多从继承(继承多个基类)

4、 抽象

1
2
1.它提供了一个简单的客户端接口,客户端可以通过该接口与类的对象进行交互,并可以调用该接口中定义的各个方法
2.它将内部类的复杂性抽象为一个接口,这样客户端就不需要知道内部的细节进行抽象处理

5、组合

1
2
1.它是一种将对象或类合成更复杂的数据结构或软件实现的方法
2.在组合中,一个对象可以调用其他模块中的成员函数,这样无需通过继承就可以实现基本功能的跨模块调用

三、面向对象的设计原则  

1.开放/封闭原则

1
2
开放/封闭原则规定,类或对象及其方法对于扩展来说是开放的,但是对于修改是封闭的
简单的说,在软件开发的时候,一定确保以通用的方式来编写类或模块,以便当需要的时候扩展类或对象行为时不必修改类本身。

优点如下:

1
2
1.现有的类不会被修改,因此退化的可能性较小
2.有助于保持以前代码的向后兼容性

2.控制反转原则

1
2
控制反转原则是指高层级的模块不应该依赖于低层级的模块,他们都应该依赖于抽象
该原则建议任何两个模块都不应以紧密的方式相互依赖

优点如下:  

1
2
1.削弱了模块间的耦合,因此消除了系统中的复杂性/刚性
2.由于在依赖模块间有一个名称的抽象层,因此便于通过更好的方式处理模块间的依赖关系

3.接口隔离原则

1
接口隔离原则规定,客户端不应该依赖于他们不需要使用的接口

优点如下:  

1
2
1.它强制开发人员编写'瘦身型'接口,并使方法和接口紧密相关
2.防止向接口中随意添加方法

4.单一职责原则  

1
2
类的职责单一,引起类变化的原因单一
如果一个类实现了两个功能,最好将他们分开,也就是说,功能才是改变的理由

优点如下:

1
2
1.每当一个功能发送变化发生变化时,除了特定的类需要改变外,其他类无需改变
2.如果一个类有多种功能,那么依赖他的类必定会由于多种原因发生,这种情况应该避免

5.替换原则

1
替换原则规定,派生类必须能够完全替代基类

四、设计模式概念  

1.设计模式主要特点 

1
2
3
它们是语言无关的,可以用多种语言实现
它们是动态的,随时会有新的模式引入
它们可以定制

2.设计模式优点  

1
2
3
4
它们可以在多个项目中重复使用
问题可以在架构级别使用
它们都经过了时间的验证
它们具有可靠性和依赖性

3.设计模式的分类  

1
2
3
4
代码段:用某种语言编写的一段具有特殊用途的代码
设计:用来解决某个特定问题的优秀解决方案
标准:这是一种解决某类问题的方法,同非常通用并且适用于当前的情况
模式:这是一个经过时间考验的、高效、可扩展的方案,能够解决一类已知问题

4.上下文--设计模式的实用性  

1
2
3
4
参与者:它们是设计模式中用到的类,类可用在模式中扮演不同的角色,已完成多个目标
非功能需求:诸如内存优化、可用性和性能需求都属于此类型。由于这些因素影响整个软件解决方案,因此至关重要
权衡:并非所有的设计模式都适用程序开发
结果:如果上下文不合适,设计模式可能对代码产生负面影响,开发人员应当了解设计模式的结果和用途

5.模式的分类  

创建型模式: #单例模式是创建型模式的一个例子

1
2
3
它们的运行机制基于对象的创建方式
它们将对象创建的细节隔离开来
代码所创建的对象与类型无关

这里有6个具体的创建型模式可供研究,它们分别是:

1
2
3
4
5
6
7
8
9
10
11
简单工厂模式(Simple Factory)
 
工厂方法模式(Factory Method)
 
抽象工厂模式(Abstract Factory)
 
创建者模式(Builder)
 
原型模式(Prototype)
 
单例模式(Singleton)

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。

结构型模式   #适配器模式是结构型模式的一个例子  

1
2
3
致力于设计出能够通过组合获得强大功能的对象和类的结构
重点是简化结构并识别类与对象之间的关系
主要关注类的继承和组合

这里有7个具体的结构型模式可供研究,它们分别是:

1
2
3
4
5
6
7
8
9
10
11
12
13
外观模式(Facade)
 
适配器模式(Adapter)
 
代理模式(Proxy)
 
装饰模式(Decorator)
 
桥模式(Bridge)
 
组合模式(Composite)
 
享元模式(Flyweight)

行为型模式  #观察者模式是行为模式的一个例子  

1
2
关注对象之间的交互以及对象的响应性
对象应该能够交互,同时仍然保持松散耦合

这里有11个具体的行为型模式可供研究,它们分别是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
模板方法模式(Template Method)
 
观察者模式(Observer)
 
状态模式(State)
 
策略模式(Strategy)
 
职责链模式(Chain of Responsibility)
 
命令模式(Command)
 
访问者模式(Visitor)
 
调停者模式(Mediator)
 
备忘录模式(Memento)
 
迭代器模式(Iterator)
 
解释器模式(Interpreter)

参考链接:https://www.cnblogs.com/alex3714/articles/5760582.html

 

posted @   百衲本  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码
点击右上角即可分享
微信分享提示