C#设计模式(1)——设计原则

设计原则

使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性。在进行设计的时候,我们需要遵循以下几个原则:单一职责原则、开闭原则、里氏替代原则、依赖倒置原则、接口隔离原则、合成复用原则和迪米特法则。

1.单一职责原则

  专业的人做专业的事,面向对象编程中类也是一样,一个类只负责一些特定的职责,如User类只负责用户相关的业务功能,Order类只负责订单相关的功能,想象下如果我们把用户和订单的功能放在一个类,然后去设计用户的权限中会怎么样呢?订单业务和权限耦合了。。单一职责原则作用是降低职责间的耦合,同时提高代码的复用率。

2.开闭原则

  开闭原则通俗的讲就是对添加(扩展)开放,对修改关闭。如我们维护一个软件系统,这时要添加一个新功能,我们可以写新代码来添加这个功能,但是不能修改以前的代码,想象下我们为了新功能修改了一些旧代码,然后发现一些旧的功能挂掉了时的心情。

3.依赖倒置

  依赖倒置原则作用是方便实现类的切换,降低业务要求和具体实现间的耦合。抽象不应该依赖细节,而细节应该依赖抽象,这就是我们为什么使用面向接口编程,而不是面向实现编程的原因。

4.接口隔离原则

  接口隔离原则指的是提倡使用多个专门的接口,而不是使用一个总的接口。以一个订单系统为例,我们自己的系统可以对订单进行增删改查操作,给第三方只提供了查询操作。如果把增删改查的功能都定义在一个接口中那么第三方的实现类也要做增删改的实现。分成两个接口就避免了这种情况。

   public interface IOrderService1
    {
        void Add();//添加
        void Delete();//删除
        void Edit();//修改
    }
    public interface IOrderService2
    {
        void Query();
    }
    //我们用的订单服务类
    public class MyOrderService : IOrderService1, IOrderService2
    {
        public void Add(){//添加操作}

        public void Delete(){//删除操作}

        public void Edit() {//修改操作}

        public void Query(){//查询操作}
    }
    //给第三方提供的订单服务类
    public class OtherOrderServeice : IOrderService2
    {
        public void Query(){//查询操作}
    }

5.合成复用原则

  合成复用指的是一个对象A包含了另一个对象B,那么A就可以委托B来使用B的功能。一个例子:

//订单类
    public class Order
    {
        public User user;//订单中有用户
    }
//用户类
    public class User
    {
        public string UserName { get; set; }
        public string getName()
        {
            return this.UserName;
        }
    }

  上边的例子中订单中包含了用户,我们可以使用order.User.getName();order委托其属性user来调用User类中的方法。注意合成复用用于“has-a”场景,例子中订单has-a用户,订单和用户是包含关系;“is-a"场景则要使用继承,如学生is-a人类,学生要继承于人类。

6.迪米特法则(最小知道原则)

  迪米特法则指的是各个类之间应该尽可能的不了解,最好是相互独立的。但是很多时候类与类之间不可避免的要传输信息,如上边的Order和User就存在强依赖关系,我们应该尽可能地降低类和类间的依赖。怎么降低依赖呢?一种常用的方式是通过中间件(如redis/rabbitmq等)来降低依赖。如A和B类要通信,原始的方式是new一个实例出来直接通信  A<-->B ,现在我们用一个中间件充当传话人那么A和B通信就变成了 A<-->中间件<-->B 形式,这样A和B就降低了耦合。

设计模式中的外观模式和中介者模式就使用了迪米特法则。

7.里氏替代原则

  里氏替代原则指的是父类存在的地方,子类都可以替换,并且行为不发生改变,只有所有的父类都可以被子类替代且行为不发生变化时才能说明父类是可复用的。一个违背里氏替换原则的例子:我们定义了鸟类有fly方法,表示鸟类都可以飞,但是企鹅也是鸟类而且企鹅不会飞,这时企鹅(子类)就不能替代其鸟类(父类)了,说明我们设计的鸟类违背了里氏替代原则。

原文地址:https://www.cnblogs.com/wyy1234/p/9961078.html

时间: 2024-08-30 10:44:30

C#设计模式(1)——设计原则的相关文章

设计模式——设计模式与设计原则

设计模式--设计模式与设计原则 一.设计模式  1.设计模式简介 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石. 模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再

设计模式之设计原则学习

设计模式的设计原则包含了:单一职责原则.里氏替换原则.依赖倒置原则.接口隔离原则.迪米特法则和开闭原则等6大原则. 单一职责原则(Single Responsibility Principle,简称SRP),英文介绍为:There should never be more than one reason for a class to change,即一个类,应当只有一个引起它变化的原因.单一职责原则,要求对象不能承担太多的职责,充分保证对象的高内聚.单一职责的优点有:1.降低了类的复杂性:2.提

设计模式之设计原则(中)

接口隔离原则(Interface Segregation Principle ),简称ISP:该原则核心思想就是客户端不应该被强迫实现一些不会使用的接口,应该把胖接口中的方法分组,然后用多个接口来代替,每一个接口只服务与一个子模块.这个跟上次分享的单一职责原则类似. 设计接口隔离原则的目的:当我们设计应用程序时,如果一个模块包含多个子模块,那我们应该正对该模块抽象.设想该模块由一个类实现,我们可以把系统抽象成一个接口,但是我们想要添加新的模块扩展程序时,如果要添加的模块只包含原来系统的一些子模块

设计模式与设计原则简介(一)

什么是设计模式? 我们知道对于很多数学问题,经常会有多种不同的解法 而且这其中可能会有一种比较通用简便高效的方法 我们在遇到类似的问题或者同一性质的问题时,也往往采用这一种通用的解法 将话题转移到程序设计中来 对于软件开发人员, 在软件开发过程中, 面临的一般问题的解决方案就是设计模式(准确的说是OOP中) 当然,如同数学的解题思路一样,设计模式并不是公式一样的存在 设计模式(Design pattern)代表了最佳的实践 是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的宝贵经验 是

设计模式与设计原则

0.0 什么是设计模式与设计原则: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性.设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样. 0.1 什么是设计原则: 设计原则是设计模式的基础,所有设计模式都必须遵循设计原则. 设计原则共有七条:单一职责原则.开放-封闭原则.里氏替换原则.依赖倒转原则.接口隔离原则.组合重用原则.迪米特原则. 1. 单一职责原则(Sing

设计模式 - 七大设计原则(一)

设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个接口只负责一件事情,只能有一个原因导致类变化 接口隔离原则:使用多个专门的接口,而不是使用一个总接口 迪米特法则(最少知道原则):只和朋友交流(成员变量.方法输入输出参数),不和陌生人说话,控制好访问修饰符 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能 合成复用原则:尽量使用对象组

设计模式之设计原则 C#

成为一名资深架构师首先要懂设计模式,在懂之前,要清楚设计原则,原来我就吃过这个亏,很久以现有人问我设计原则,我是一头茫然,不是只有设计模式吗?且不知设计原则就像是写书法一样,楷体就是方正,竖道有垂露等,隶书横有蚕头燕尾等. 这些"秩序"遵循SOLID architecture principles.这组面向对象的设计原则,通过实践总结为 1),SRP(Single Responsibility Principle):单一责任原则: A class should take care of

设计模式--六大设计原则

1.单一职责原则(SRP ) 定义:Single Responsibility Principle ? 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来: ? 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案: ? 遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2

设计模式 - 七大设计原则(二)

概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个接口只负责一件事情,只能有一个原因导致类变化 接口隔离原则:使用多个专门的接口,而不是使用一个总接口 迪米特法则(最少知道原则):只和朋友交流(成员变量.方法输入输出参数),不和陌生人说话,控制好访问修饰符 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能 合成复用原则:尽量使用对象组合(has-a)/聚合(conta

【设计模式】设计原则--面向接口编程你理解的对吗?

最近看了<Head First Design Patterns>这本书.正如其名,这本书讲的是设计模式(Design Patterns),而这本书的第一章,讲的是很重要的一些设计原则(Design Principles). Identify the aspects of your application that vary and separate them from what stays the same.(识别应用程序中各个方面的变化,并将它们与保持不变的部分分开.) Program to