设计模式一

简介: 设计模式是面向对象编程的实践经验,旨在解决一系列问题,促进软件的可升级和维护。它分为创建型(如工厂、单例模式)、结构型(适配器、装饰器模式等)和行为型(观察者、策略模式等)三大类。J2EE模式关注表示层,包括MVC模式等。设计模式的七大原则包括里氏替换、依赖倒置、开闭原则、单一职责、接口隔离、迪米特原则和合成复用原则,这些原则有助于减少耦合和提高代码可读性。接口作为契约和层间对接工具,约束类型行为并允许实现多继承。

简介

设计模式是一种最佳实践,是长期起来总结的解决一系列问题的一种套路。

一般针对面向对象语言而言,从大型软件架构出发,便于升级和维护的软件设计思想,强调降低依赖耦合

目的:代码重用和工程化

类型

创建型:创建对象的同时隐藏创建的业务逻辑

工厂模式、单例模式、建造者模式、原型模式

结构型:将现有的类和对象组织在一起形成更强大的功能结构

适配器模式、桥接模式、过滤器模式、组合模式、装饰器模式、外观模式、享元模式、代理模式

行为型:主要关注对象之间的通信

观察者模式、责任链模式、命令模式、解释器模式、中介模式、备忘录模式、状态模式

空对象模式、策略模式、模板模式、访问者模式

J2EE模式(因为Sun公司定的):主要关注表示层

MVC模式、拦截过滤器

七大原则

一、里氏替换:任何父类出现的地方子类都一定可以出现

防止继承泛滥

子类可以添加自有的方法,但是用父类接收时,是不能用子类特有方法或者特有成员的。

如果子类拥有和父类一样的属性或者方法或者其他非私有成员,此时会隐藏父类相同的非私有成员。

但是具体用的是父类的非私有成员还是子类的非私有成员,主要看声明的类型

如果需要解除这个限制,需要父类非私有成员声明为virtual,子类需要override

要求:

子类方法输入参数不能比父类更严格,返回值不能比父类宽松

二、依赖倒置原则:依赖于抽象而不依赖于具体。

是开闭原则的基础。面向接口编程,有利于代码的升级和扩展

三、开闭原则:对扩展开放,对修改关闭

在原程序需要扩展的时候,不能去修改原有的代码。降低维护带来的风险

四、单一职责原则:对象不应该承担太多职责

便于理解,提高代码的可读性

如果一个对象承担太多职责,则会引发:

1.类中的一个方法的改变可能会影响到这个类中的其他方法,从而导致这个类的不稳定。

2.对象需要某个方法时,不得不将其他不需要的方法一并包含进来

操作:把一个大类,按照领域或者业务拆分成小类
五、接口隔离原则 接口最小化,类最大化

多个接口比单个接口好,系统为了追求稳定应该依赖于其足够使用的最小接口,而不应该依赖于其他不需要的接口。

也可以降低类之间的耦合度

六、迪米特原则(最少知道原则)

降低耦合

一个实体应当尽量少的与其他实体之间发生相互作用,使系统的模块能够相互独立

七、合成复用原则:尽量使用合成和聚合,而不是使用继承

降低耦合

依赖:例如我们需要玩手机,于是我们对手机产生了依赖关系。依赖关系是四种关系中耦合度最小的。被依赖的类,一般在依赖类中会以返回值、形参、局部变量等方式出现。画图时一般以虚线箭头表示

关联:学生与老师,学生可以不玩手机,但是不能没有老师,没有老师,也没有所谓的学生。关联暗示依赖,但是耦合关系最强。可分为单向关联、双向关联、自身关联、多维关联

组合:主要是集体和个体之间的关系,如公司和员工

聚合:个体与组成部分的关系,如汽车和轮胎

接口的意义

1.接口可以规范和约束我们的类型,一旦在接口定义了未实现的方法声明,其实现的接口子类就必须实现该接口声明的未实现方法

2.用于项目之间的契约和层间的对接

3.在.net6的接口中,是可以写方法实现的(和c++一样实现了多继承),如果多个接口有同样的方法实现,那么哪个接口接收这个类的对象,就调用了哪个接口的方法。如果子类重写了该方法,一律调用的是子类重写的方法。

相关文章
|
7月前
|
设计模式 算法 Java
C++设计模式
C++设计模式
45 0
|
7月前
|
设计模式 Java 测试技术
设计模式之-降龙十八掌
设计模式之-降龙十八掌
63 0
|
7月前
|
设计模式 数据中心
常用设计模式这样学
常用设计模式这样学
|
7月前
|
设计模式 消息中间件 Kubernetes
设计模式总结(二)
设计模式总结(二)
|
7月前
|
设计模式 Java C#
C#设计模式——上
C#设计模式——上
|
7月前
|
设计模式 前端开发 C++
什么是设计模式?
什么是设计模式?
72 0
|
设计模式
23种设计模式
23种设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。
79 0
|
设计模式 关系型数据库
设计模式介绍
设计模式介绍
108 0
|
设计模式
纵观设计模式
前言: 设计模式已经学习了近一个月,但深知还没有学到设计模式的精髓,先将这一阶段的感受记录下来,以后加实例辅助学习。
纵观设计模式
|
存储 设计模式 缓存
设计模式
设计模式
1162 0