前言背景

  这是一条望不到尽头的编程之路,自踏入编程之路开始。就面临着各式各样的挑战,而我们也需要不断的挑战自己、不断学习充实自己、打好坚实的基础。以使我们可以走的更远。刚踏入编程的时候。根据需求编程,需求改代码改。需求加代码加。重复来重复去。一切都觉得还不错。功能实现了,项目跑起来了。但是真的就不错了吗?当然不是,也许过了几年你再回头看这些代码或许你也不知道写的啥了。这样写出来的代码你自己都可能看不到,更何况其他人呢?对吧。偶尔一次闯入一处秘境。发现了一本名叫”设计模式”的”武功”秘籍。也是编程之路之上不可获取的能力之一。它解决了代码重复使用,代码冗余的问题。使代码结构简洁易懂。使代码的思路清晰明了。代码优美,结构完善合理。我们一起看看这个至高的秘籍。

关卡模式详细介绍

  下面我们看看此秘籍具体到底有些啥。放心、绝对不会像那啥”欲练神功必先自宫”一般的秘籍了。

  此本秘籍分为三大部分:

一、创建型模式

二、结构型模式

三、行为型模式

  第一部分的创建型模式共分为:

第一章 单例模式(Singleton

保证一个类仅有一个实例,全局调用。该模式是将对象创建的数量控制为一个。

第二章 工厂方法模式(Factory Method

工厂模式讲究的是一个工厂对应一个产品的模式,平行的等级结构,这里重点针对单个对象的变化

第三章 抽象工厂模式(Abstract Factory

抽象工厂模式关注的更多是多系列的或相互依赖的产品变化,提供一个创建一系列相关或相互依赖对象的接口,无需指定它们的类。

第四章 建造者模式(Builder

该模式解决的主要是一个复杂对象的创建工作的问题,各个子对象组合一个复杂对象。组合的算法稳定,子对象易变化的情况

第五章 原型模式(Prototype

通过原型实例来创建对象,然后通过拷贝原型来创建新对象

第二部分的结构型模式共分为:

第六章 适配器模式(Adapter

该模式主要关注的是接口转换的问题,将匹配的接口通过适配对接工作

第七章 桥接模式(Bridge

该模式关注的是分离接口与其具体实现,使其变化独立

第八章 装饰模式(Decorator

该模式关注的是动态的给对象增加一些额外的职责,稳定接口不变。此模式比生成子类继承更加的灵活

第九章 组合模式(Composite

将对象组合成树形结构以表示“部分-整体”的层次结构,它使得客户对单个对象和复合对象的使用具有一致性。

第十章 外观模式(Facade

该模式关注的是简化接口,简化组件系统与外部程序的依赖关系。

第十一章 享元模式Flyweight

该模式注重保留接口,在内部使用共享技术对对象存储进行优化

第十二章 代理模式Proxy

对其他对象提供一种对象来控制对这个对象的访问。

第三部分的行为型模式共分为:

第十三章 版方法模式Template Method

该模式关注对算法结构的封装,定义稳定的算法结构,但是支持允许算法子步骤的变化。

第十四章 命令模式(Command

将一个请求封装为一个对象,从而使你可用不同的请求对客户(客户程序,也是行为的请求者)进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。命令模式的实现可以提供命令的撤销和恢复功能。

第十五章 迭代器模式(Iterator

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

第十六章 观察者模式(Observer

定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

第十七章 中介者模式(Mediator

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

第十八章 状态模式(State)

允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。

第十九章 策略模式(Strategy)

定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。

第二十章 职责链模式(责任链模式--Chain of Responsibility)

避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理它为止。

第二十一章 访问者模式(Visitor)

表示一个作用于某对象结构中的各个元素的操作。它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。

第二十二章 备忘录模式(Memento

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

第二十三章 解释器模式(Interpreter

给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。

  设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

  设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

闯关必备条件

  话说之前有讲到面向对象三大特性——封装、继承、多态。也有讲到面向对象设计SOLID五大原则。今天我们也将开启设计模式的闯关之路。其中到底有没有联系呢?到底有没有关系呢?

  事实上面向对象三大特性在一定程度上体现了面向对象设计的五大原则。那么与设计模式又有什么关系呢。其实面向对象设计的五大原则也可称为设计模式五大原则。学习设计模式之前我们都得先了解其原则,学习其基础。在此基础之上学习设计模式才是最好的。

  这里再次简单介绍设计模式的五大原则(SOLID):

一、单一责任原则(SRP)

单一责任原则指出当需要修改某个类的时候原因有且只有一个。也就是说一个类应该只负责一件事情。

二、开放封闭原则(OCP)

开放封闭原则指的是程序模块应该遵循关闭修改,开放扩展。

三、里氏替换原则(LSP)

子类型必须可替代其基类型 –一个对象出现的地方都可以由其子类代替并且不会出错,即是符合里氏替换原则的。

四、接口分离原则(ISP)

接口分离原则—client不应该被强迫依赖它不使用的方法,表明方法是分开或者隔离的。

五、依赖倒置原则(DIP)

依赖倒置原则-也是最后一个原则了。其原则指出—一个高级模块不应依赖于低级模块,两个都应该取决于抽象。抽象不应该依赖具体细节,细节应该依赖于抽象。

总结开启闯关之路

  打好基础,学习了解其设计的原则,学习设计模式必须在其原则的基础上学习。学习设计模式的路并不平稳,在起初之期,比较多的概念规则都不是很清楚、基础不扎实。会给学习之路带来诸多麻烦。学习理解之后我们也需要更多的思考。选择合适的设计模式使用,宁可不用、切勿乱用。用的好那么皆大欢喜普天同乐。可是用不好的话也有可能下一个祭天的就是你了。设计模式需要许多的模式实践。接下来的时间之中我们即将开启C#设计模式的闯关之路了。

  生命不息、战斗不止!

欢迎大家扫描下方二维码,和我一起踏上设计模式的闯关之路吧!

  

C#设计模式开启闯关之路的更多相关文章

  1. python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点

    python 闯关之路四(下)(并发编程与数据库编程)   并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型   操作系统工作原理介绍.线程.进程演化史.特点.区别 ...

  2. python 闯关之路三(面向对象与网络编程)

    1,简述socket 通信原理 如上图,socket通信建立在应用层与TCP/IP协议组通信(运输层)的中间软件抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/ ...

  3. python 闯关之路二(模块的应用)

    1.有如下字符串:n = "路飞学城"(编程题) - 将字符串转换成utf-8的字符编码的字节,再将转换的字节重新转换为utf-8的字符编码的字符串 - 将字符串转换成gbk的字符 ...

  4. python 闯关之路四(上)(并发编程与数据库理论)

    并发编程重点: 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号. 事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模 ...

  5. python 闯关之路四(下)(并发编程与数据库编程)

    并发编程重点: 并发编程:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号. 事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模 ...

  6. python闯关之路二(模块的应用)

    1.有如下字符串:n = "路飞学城"(编程题) - 将字符串转换成utf-8的字符编码的字节,再将转换的字节重新转换为utf-8的字符编码的字符串 - 将字符串转换成gbk的字符 ...

  7. python 闯关之路一(语法基础)

    1,什么是编程?为什么要编程? 答:编程是个动词,编程就等于写代码,那么写代码是为了什么呢?也就是为什么要编程呢,肯定是为了让计算机帮我们搞事情,代码就是计算机能理解的语言. 2,编程语言进化史是什么 ...

  8. python闯关之路(五)前端开发

    一,HTML部分 1,XHTML和HTML有什么区别 HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同: XHTML 元素必须被正确地嵌套. XHTML 元素必 ...

  9. python闯关之路一(语法基础)

      1,什么是编程?为什么要编程? 答:编程是个动词,编程就等于写代码,那么写代码是为了什么呢?也就是为什么要编程呢,肯定是为了让计算机帮我们搞事情,代码就是计算机能理解的语言. 2,编程语言进化史是 ...

随机推荐

  1. 洛谷 P1970 花匠

    题目描述 花匠栋栋种了一排花,每株花都有自己的高度.花儿越长越大,也越来越挤.栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致. 具体而 ...

  2. mongo去重统计

    表名:parkUserCost id: patkId: userId: phone: costVal: 适合特定条件下,对某些字段进行去重筛选.(比如限定抢购) 第一种,使用\(first操作符.\) ...

  3. Button事件的三种实现方法

    onclick事件的定义方法,分为三种,分别为在xml中进行指定方法:在Actitivy中new出一个OnClickListenner():实现OnClickListener接口三种方式. 1.在xm ...

  4. .NET Core CSharp初级篇 1-5 接口、枚举、抽象

    .NET Core CSharp初级篇 1-5 本节内容类的接口.枚举.抽象 简介 问题 如果你需要表示星期或者是某些状态,使用字符串或者数字是否不直观? 你是否发现,无论何种电脑,它的USB口的设计 ...

  5. Java-面向对象oop

    在提到面向对象的时候,大多数的书上面介绍的是简短的 类是对象的集合,对象是类的实例化.这样笼统的说法的确可以概括面向对象的思想,但却不能让一个刚入门的人理解到面向对象. 在这里先介绍一下类,当你在Ja ...

  6. C#各版本新增加功能

    本系列文章主要整理并介绍 C# 各版本的新增功能. C# 8.0 C#8.0 于 2019年4月 随 .NET Framework 4.8 与 Visual Studio 2019 一同发布,但是当前 ...

  7. GitLab-CI 来自动创建 Docker 镜像

    1.what is gitlab-ci docker image CI/CD 自动化集成,自动化部署.简单的说就是把代码提交到gitlab管理的同时部署到指定的server,打成docker imag ...

  8. spark 源码分析之七--Spark RPC剖析之RpcEndPoint和RpcEndPointRef剖析

    RpcEndpoint 文档对RpcEndpoint的解释:An end point for the RPC that defines what functions to trigger given ...

  9. Thinkphp 3.2.3 parseWhere设计缺陷导致update/delete注入 分析

    目录 分析 总结 分析 首先看一下控制器,功能是根据用户传来的id,修改对应用户的密码. 13行把用户传来的id参数送入where()作为SQL语句中的WHERE语句,将pwd参数送入save()作为 ...

  10. 【JDK】JDK源码分析-LinkedHashMap

    概述 前文「JDK源码分析-HashMap(1)」分析了 HashMap 主要方法的实现原理(其他问题以后分析),本文分析下 LinkedHashMap. 先看一下 LinkedHashMap 的类继 ...