Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >设计模式的核心知识

设计模式的核心知识

作者头像
SAP梦心
发布于 2022-05-07 12:24:24
发布于 2022-05-07 12:24:24
27600
代码可运行
举报
运行总次数:0
代码可运行

终于把23种设计模式给整理完了,通通理解了一遍。虽然看得懂,能够随着里面代码和传递参数的方法绕来绕去,一层一层拔下去而不会“头晕”,但离实际运用它们还是有很大的距离的。

这23种设计模式涵盖了所有软件架构师和设计师前辈们的经验和方法,将最常用的设计方法和模式都“抽取”出来成为精华的核心代码,就像数学里面的公式一样,只要你设计模式会了,会应用了,那么你离设计出没有“臭虫”和高效的代码不远了~

通过对这些模式的学习和研究,我发现它们还是有一些共同之处的,用到OO里面的三大核心自不必说,同时还很多次用到一个地方:那就是当父类(通常为抽象类)对象A引用子类对象B的时候,然后用A去调用父类中的方法时,这里面有几个地方要注意:当子类中从父类继承而来的虚方法如果采用覆盖(new去修饰)方式时,实际执行的是父类的方法;如果采用重写(override修饰)的方式时,则实际执行的是子类的方法。这个是设计模式的“心脏”,如果不能理解这个原则,则设计模式是看不下去的!同时它也是组建多态的必要核心。因为我们常常要利用抽象类去引用子类来实现多态。

说了这么多理论,我们来举个例子吧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Program
 {
  static void Main(string[] args)
 {
 A a1 = new B();
 A a2 = new C();
 a1.Methor();
 a2.Methor();
 Console.ReadKey();
 }
 }
 public abstract class A
 {
 public virtual void Methor()
 {
 Console.WriteLine("调用A类中的方法!");
 }
 }
 class B :A
 {
 public override void Methor()
 {
 Console.WriteLine("调用B类中的方法!");
 }
 }
 class C : A
 {
 public new void Methor()
 {
 Console.WriteLine("调用C类中的方法!");
 }
 }

执行的结果是:

调用B类中的方法!

调用A类中的方法!

从程序中一看就很明了了!

当然,这个这只是设计模式中的一个小小的应用而已,其实传参在设计模式中还是比较常见,平常的如int和string型的作为参数比较常见,但在实际大型软件运用中这远远不够的,有时候一个类,对象,属型都可以作为参数来传递,这些往往比较复杂~~

设计模式中告诉我们主要一下几点:

1:不要重复设计。利用拷贝粘贴那是低级程序员要干的事,而且这样做的坏处是当在很多地方重复设计时,如果需要修改重构,则工作量大得惊人,也容易出错!

2:低耦合,高内聚。至于什么是耦合,什么是内聚可以去百度一下。当两个类之间耦合度越低,则这两个类之间的关联就越少,修改一个类就不会去破坏另一个类的运作。一个类中的实现功能最好高内聚,剔除一些不必要的代码…

3:依赖倒转原则。就是高层模块不要依赖底层模块,而是两者都要依赖抽象;抽象不应该依赖细节,而细节应该依赖抽象。只要抽象和接口稳定,则更改任何一个地方都不会对别的地方造成影响,同时这样也能够很好得复用。

4:单一原则。当一个类承担过多的功能过多的设计的时候就等于把这些原则耦合在一起,一个职责的变化可能会抑制这个类完成其他的职责,这种设计会导致脆弱的设计。

5:开放封闭原则。对扩展开放,对修改封闭。设计软件最好遵循OO原则,做到少修改,多扩展。

6:多层封装。经典的三层结构告诉我们,把不同功能的层封装起来,这样结构很清晰和条理,易于维护,而且修改其中一层也不会给其他层带来多少影响…

……

总之一句话:我们设计的软件要扩展性好,可复用,易于维护,灵活性好……

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2008-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式之策略者模式
策略者模式在现实世界的使用很多,比如互金场景中的优惠券模式,可以分为本金券,返现券,加息券,增收券等,每种卡券给予用户享受不同的权益,如果有一天增加了新的优惠券,也很容易扩展进去。由此可见,策略者模式使得业务线索更加清晰明了,每种业务线索场景彼此互不关联,互不影响。
AI.NET 极客圈
2019/07/19
6640
设计模式之策略者模式
【大话设计模式】——工厂模式家族
在工厂模式家族中最出名的是工厂三姐妹,根据抽象的程度不同分为简单工厂、工厂模式和抽象工厂模式。他们在我们平时的编程中会经常使用。所以我们应该详细地了解一下他们三者之间优缺点。
程序猿小亮
2021/01/29
3050
身边的设计模式(二):工厂模式 与 DI
在上一篇文章中,我们说到了《单例模式》,了解到了它的场景,也学会了它的目的,从模式类型上,我们可以知道,他是一个创建型的设计模式,说白了就是创建一个对象的实例,只不过是单例的 —— 单一实例的。
老张的哲学
2022/04/11
9400
身边的设计模式(二):工厂模式 与 DI
2.设计模式-七大原则(C++)
任何一个设计模式都离不开七大原则中的任一原则.所以七大原则非常重要,只要我们明白了七大原则,就可以知道如何在项目中使用什么设计原则了.
诺谦
2021/07/08
6550
设计模式学习---策略模式
最近在看"Head First 设计模式"这本书,便想将自己所学的记录下来以加深理解,文中肯定有许多不足之处,请各位前辈们指出.
莫问今朝
2018/10/15
3840
Thinking In Design Pattern——工厂模式演绎
我始终认为学习设计模式需要怀着一颗敬畏的心去探索,这一系列23种设计模式并不是一蹴而就,都是前人根据自己的经验逐渐演化出来,所以才会形成非常经典的理论。学习设计模式,我想最好的方式是根据自己的经验逐渐来推导它,这样你才理解了其中奥妙,而不是靠记忆背住了它,所以,这篇博文主要分析三种工厂模式的演变过程: 来实现吧,最简单计算器 代码能否复用性 忘记面向过程吧,面向对象思想的引入 多态,简化代码大杀器 质的飞跃:简单工厂模式的运用 迷途知返:拨开云雾见工厂方法 暴走一击:抽象工厂+工厂方法 我们先举一个最平
用户1161731
2018/01/11
7660
Thinking In Design Pattern——工厂模式演绎
【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性
BWH_Steven
2020/10/30
8881
【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)
设计模式:面向对象的基础知识
主流的编程范式有三种:面向过程、面向对象和函数式编程,我们现在使用的主流编程语言 C# 或 Java,都是面向对象语言,所以常常说的设计模式也是在面向对象语言这个前提之下。
oec2003
2021/11/19
4610
【愚公系列】2023年11月 二十三种设计模式(二十二)-模板方法模式(Template Method Pattern)
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
愚公搬代码
2023/11/21
1920
OOAD-设计模式(一)概述
前言   在我们很多时候设计代码都是需要用到各种不一样的设计模式的,接下来着几篇给大家领略一下设计模式。知道设计模式的作用,以及在代码的具体体现。很多时候我们看不懂代码就是因为我们不知道它使用的设计模式。   国庆的我很痛苦,学习是痛苦的,成长是快乐的! 一、什么是面向对象 1)面向对象(Object-Orientation,简称OO)是一种系统建模技术/编程思想。 2)面向对象编程(Object-Orientation Programming,简称OOP)是按照OO的方法学来开发程序的编程方式 3) 面向
用户1195962
2018/01/18
3.1K0
设计模式-外观模式、适配器模式、模板方法模式详解
  在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。
IT大咖说
2024/05/18
3220
设计模式-外观模式、适配器模式、模板方法模式详解
通俗易懂设计模式解析——工厂模式(Factory Method)
  上一篇我们介绍了单例模式,今天给大家讲一个比较简单的模式——工厂模式(Factory Method),工厂模式又是什么呢?顾名思义,工厂——生产制造东西的地方。那么应用在程序当中该如何使用、并且又起到什么效果呢?以至于为什么用工厂模式呢?
小世界的野孩子
2019/09/11
4071
通俗易懂设计模式解析——工厂模式(Factory Method)
设计模式前篇之:一起过一下面向对象的概念
面向对象编程,好像从来都是最熟悉的陌生人,相信大家都看过难记难懂的概念。面向对象的设计模式存在大量的类结构,体现面向对象的四个特征和遵循面向对象的六个原则,认识它们才能更好理解设计模式。今天就写一写它们,也相对于给自己做笔记。
Twcat_tree
2022/11/29
2140
C#之三十八 简单工厂设计模式
​​设计模式​​​(​​Design pattern​​​)是一套被反复使用、多数人知晓的、经过分​​类​​​编目的、代码设计经验的总结。使用设计​​模式​​是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
张哥编程
2024/12/17
1040
C#之三十八 简单工厂设计模式
面向对象设计模式七大设计原则
设计模式:面向对象语言开发过程中,遇到种种的场景和问题,提出的解决方案和思路,沉淀下来,设计模式是解决具体问题的套路
明志德道
2023/10/21
2260
面向对象设计模式七大设计原则
【设计模式自习室】带你理清工厂模式的三种形式
工厂模式是一个非常重要的创建型模式,但是工厂模式又分为好多种,并且网上文章很多,很多对工厂模式的定义都不是很明确,甚至还互相冲突,本文希望通过放在一起串讲的形式,力求能够用最简洁的语言理清工厂模式。
Rude3Knife的公众号
2020/01/17
4820
【设计模式自习室】带你理清工厂模式的三种形式
RPG设计(角色技能与Strategy模式)
看过一些设计模式方面的书籍和文章,虽然很正式,很权威,(也觉得有那么一点刻板),总是觉得让人不那么好靠近。于是,我思考着像写故事一样来写下自己对设计模式的理解。我们将以一款奇幻角色扮演游戏(D&D)为蓝本,通过游戏中的模块创建或者功能实现来展示GOF的设计模式。当然,这不是一款真正意义上的游戏,只是为了了解设计模式,所以,我会尽可能的使游戏简单。废话不多说了,我们Start off吧。
张子阳
2018/09/30
2K0
RPG设计(角色技能与Strategy模式)
重温设计模式系列(二)面向对象基础知识
文章介绍了面向对象的基础知识,对象,类,抽象,接口等基本概念,面向对象的三大特征以及UML类图的基础知识,作为后续文章的基础。
架构之家
2022/07/12
2950
重温设计模式系列(二)面向对象基础知识
JavaScript设计模式经典-面向对象中六大原则
主要学习JavaScript中的六大原则。那么六大原则还记得是什么了吗?六大原则指:单一职责原则(SRP),开放封闭原则(OCP),里氏替换原则(LSP),依赖倒置原则(DIP),接口分离原则(ISP),最少知识原则(LKP)。
达达前端
2019/11/21
8320
JavaScript设计模式经典-面向对象中六大原则
用C#(.NET Core) 实现简单工厂和工厂方法设计模式
本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是
solenovex
2018/04/17
3K0
用C#(.NET Core) 实现简单工厂和工厂方法设计模式
推荐阅读
相关推荐
设计模式之策略者模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档