C#设计模式之〈一〉:设计模式概念和分类

设计模式是解决软件设计中常见问题的通用解决方案,提高代码可扩展性、可维护性和可读性。文章介绍了设计模式的七大原则,如单一职责原则、开放封闭原则等,并按创建型、结构型和行为型分类介绍了一系列设计模式,如工厂模式、单例模式、策略模式等。
摘要由CSDN通过智能技术生成

一、概述

  设计模式(Design pattern)是在软件设计领域中,针对特定问题和场景的一种解决方案。它是经过反复实践和验证的可重用的设计经验总结,目的是提高代码的可扩展性、可维护性、复用性和可读性。

  设计模式描述了类和对象之间的通用关系,并提供了解决特定问题的指导方针。它们不是具体的算法或代码,而是更高层次的抽象,用于解决面向对象设计中的一些常见问题。设计模式可以帮助开发者更好地组织和设计代码,使得代码更易于理解和扩展。

  设计模式可以应用于各个层次和阶段的软件开发过程,从需求分析到系统设计再到详细设计和编码阶段。使用设计模式可以帮助开发者从一开始就将可维护性、可扩展性和可重用性融入到设计中,从而减少代码的重复工作,并降低系统的复杂性。

二、七大原则

  为了更好地应用设计模式,使得代码更具可读性、可扩展性和可维护性,在使用设计模式时应遵循的一些基本原则和指导方针:

  • 单一职责原则(Single Responsibility Principle, SRP)
     一个类或模块应该有且只有一个责任。即一个类应该只有一个引起它变化的原因。这样可以提高代码的内聚性和可维护性。

  • 开放封闭原则(Open Closed Principle, OCP)
     软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。通过抽象和多态来实现,在不修改已有代码的情况下扩展功能。

  • 里氏替换原则(Liskov Substitution Principle, LSP)
     子类应该能够替换父类并且程序行为不会产生错误或异常。子类应该保持与父类相同的行为约定,但可以有自己的特殊实现。

  • 依赖倒置原则(Dependency Inversion Principle, DIP)
     高层模块不应该依赖于低层模块,而是通过抽象进行通信。依赖应该基于抽象而不是具体类。

  • 接口隔离原则(Interface Segregation Principle, ISP)
     客户端不应该依赖于它不需要使用的接口。一个类对其他类的依赖应该建立在最小的接口上。

  • 迪米特法则(Law of Demeter, LoD)
     一个对象应该与其他对象之间保持最小的交互。即一个对象应该只与其直接的朋友进行通信,避免类之间的紧耦合。

  • 组合/聚合复用原则(Composition/Aggregation Reuse Principle, CARP)
     通过组合或聚合关系,而不是继承,实现代码的复用和灵活性。

  *原则并非一成不变的规则,具体应用时还需根据实际情况进行权衡和调整。

三、分类

  设计模式可以根据其目的和功能进行分类。常见的设计模式分类如下:

  • 创建型模式(Creational Patterns)
     这些模式关注对象的实例化过程,帮助我们创建对象的方式更加灵活和可扩展。常见的创建型模式包括单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。

  • 结构型模式(Structural Patterns)
     这些模式关注对象的组合方式,帮助我们设计类和对象的结构以达到更好的组织和管理代码的目的。常见的结构型模式包括适配器模式、装饰器模式、代理模式、组合模式、桥接模式、外观模式和享元模式。

  • 行为型模式(Behavioral Patterns)
     这些模式关注对象之间的通信和交互方式,帮助我们实现不同对象之间的协作和职责分配。常见的行为型模式包括策略模式、观察者模式、迭代器模式、模板方法模式、命令模式、备忘录模式、状态模式、访问者模式和解释器模式。

  除了以上三种主要的分类,还有一些其他的设计模式,如并发型模式、性能型模式等,它们关注特定领域或特定问题的解决方案。

  和七大原则一样,设计模式并非一成不变,开发者在使用设计模式时应根据实际情况进行选择和灵活运用,以达到更好的设计效果。

设计模式简述目的
工厂模式(Factory Pattern)不同条件下创建不同实例 产品标准化,生产更高效封装创建细节
抽象工厂(Factory Pattern)提供一个创建一组相关或相互依赖对象的接口封装创建细节
单例模式(Singleton Pattern)保证一个类仅有一个实例,并且提供一个全局访问点保证独一无二
原型模式(Prototype Pattern)通过拷贝原型创建新的对象高效创建对象
建造者模式(Builder Pattern)用来创建复杂的复合对象开放个性配置步骤
代理模式(Proxy Pattern)为其他对象提供一种代理以控制对这个对象的访问增强职责
外观模式(Facade Pattern)对外提供一个统一的接口用来访问子系统一访问入口
装饰器模式(Decorator Pattern)为对象添加新功能灵活扩展、同宗同源
享元模式(Flyweight Pattern)使用对象池来减少重复对象的创建共享资源池
组合模式(Composite Pattern)进行递归组合,让客户端能够以一种的方式对其进行处理统一整体和个体
适配器模式(Adapter Pattern)将原来不兼容的两个类融合在一起兼容转换
桥接模式(Bridge Pattern)将两个能够独立变化的部分分离开来不允许用继承
模板模式(Template Pattern)定义一套流程模板,根据需要实现模板中的操作逻辑复用
策略模式(Strategy Pattern)封装不同的算法,算法之间能互相替换把选择权交给用户
责任链模式(Chain of Responsibility Pattern)拦截的类都实现统一接口,每个接收者都包含对下一个接收者的引用。将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止解耦处理逻辑
迭代器模式(Iterator Pattern)提供一种方法顺序访问一个聚合对象中的各个元素统一对集合的访问方式
命令模式(Command Pattern)将请求封装成命令,并记录下来,能够撤销与重做解耦请求和处理
状态模式(State Pattern)根据不同的状态做出不同的行为绑定状态和行为
备忘录模式(Memento Pattern)保存对象的状态,在需要时进行恢复备份、后悔机制
中介者模式(Mediator Pattern)将对象之间的通信关联关系封装到一个中介类中单独处理,从而使其耦合松散统一管理网状资源
解释器模式(Interpreter Pattern)给定一个语言,定义它的语法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子实现特定语法解析
观察者模式(Observer Pattern)状态发生改变时通知观察者,一对多的关系解耦观察者与被观察者
访问者模式(Visitor Pattern)稳定数据结构,定义新的操作行为解耦数据结构和数据操作

Next
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穷的捡破烂儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值