C# 设计模式 概述

一、7种常用的面向对象设计原则

1.单一职责原则(SRP):一个对象应该只包含单一的职责,并且该职责被完全封装在一个类中
2.开闭原则(OCP):软件实体应当对扩展开放,对修改关闭
3.里氏代换原则(LSP):所有引用基类的地方必须透明的使用其子类的对象
4.依赖倒转原则(DIP):高层模块不应该依赖低层模块,他们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象
5.接口隔离原则(ISP):客户端不应该依赖那些他不需要的接口
6.合成复用原则(CRP):优先使用对象组合,而不是继承来达到复用的目的
7.迪米特法则(LoD):每一个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

二、创建型模式

定义
  ①创建型模式(Creational Pattern)关注对象的创建过程
  ②创建型模式对类的示例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离,对用户隐藏了类的示例的创建细节
  ③创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展

1.简单工厂模式(Simple Factory Pattern)
  1.1 定义
      定义一个工厂类,它可以根据参数的不同返回不同类的示例,被 创建的示例通常都具有共同的父类。
      {
         ①在简单工厂模式中用于创建示例的方法通常是静态(static)方法,因此又被称为静态工厂方法(Static Factory Method)模式
         ②要点:如果需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无须知道其创建细节
      }

  1.2 简单工厂模式的结构
    简单工厂模式包含以下3个角色:
      ①Factory(工厂角色)
      ②Product(抽象产品角色)
      ③ConcreteProduct(具体产品角色)

  1.3 适用环境
    ①工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
    ②客户端只知道传入工厂类的参数,对于如何创建对象并不关心

  1.4 示例
    c#: 2.1SimpleFactorySample

2.工厂方法模式(Factory Method Pattern)/工厂模式(Factory Pattern)
   2.1 定义
     一个用于创建对象的接口,但是让子类决定将哪一个类示例化。工厂方法模式让一个类的示例化延迟到其子类。
     {
        ①简称为工厂模式(Factory Pattern)
        ②又可称作虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Factory Pattern)
        ③工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象
        ④目的是将产品类的示例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该示例化哪一个具体产品类
     }

   2.2 工厂方法模式的结构
     工厂方法模式包含以下4个角色:
       ①Product(抽象产品)
       ②ConcreteProduct(具体产品)
       ③Factory(抽象工厂)
       ④ConcreteFactory(具体工厂)

   2.3 适用环境
     ①客户端不知道它所需要的对象的类(客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可,具体产品对象由具体工厂类创建)
     ②抽象工厂类通过其子类来指定创建哪个对象

   2.4 示例
     c#: 2.2FactoryMethodSample

3.抽象工厂模式(Abstract Factory Pattern)
   3.1 定义
     提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
     {
        ①又称为工具(Kit)模式
        ②抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品
        ③当一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象时,抽象工厂模式比工厂方法模式更为简单、更有效率
     }

   3.2 抽象工厂模式的结构
     抽象工厂模式包含以下4个角色:
       ①AbstractFactory(抽象工厂)
       ②ConcreteFactory(具体工厂)
       ③AbstractProduct(抽象产品)
       ④ConcreteProduct(具体产品)

   3.3 模式动机
     ①当系统所提供的工厂生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构、属于不同类型的具体产品时就可以使用抽象工厂模式
     ②抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形式

   3.4 适用环境
     ①一个系统不应当依赖于产品类示例如何被创建、组合和表达的细节
     ②系统中有多于一个的产品族,但每次只使用其中某一产品族
     ③属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来
     ④产品等级结构稳定,设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构

   3.5 示例
     c#: 2.3AbstractFactorySample

4.建造者模式(Builder Pattern)
   4.1 定义
     将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
     {
        ①将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可
        ②关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程
     }

   4.2 建造者模式的结构
     建造者模式包含以下4个角色:
       ①Builder(抽象建造者)
       ②ConcreteBuilder(具体建造者)
       ③Product(产品)
       ④Director(指挥者)

   4.3 模式适用环境
     ①需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员变量
     ②需要生成的产品对象的属性相互依赖,需要指定其生成顺序
     ③对象的创建过程独立于创建该对象的类。在建造者模式中通过引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类和客户类中
     ④隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品

   4.4 示例
     c#: 2.4BuilderExtend && 4BuilderSample

5.原型模式(Prototype Pattern)
   5.1 定义
     原型管理器(Prototype Manager)将多个原型对象存储在一个集合中供客户端使用,它是一个专门负责克隆对象的工厂,其中定义了一个集合用于存储原型对象,如果需要某个原型对象的一个克隆,可以通过复制集合中对应的原型对象来获得。
     {
        ①工作原理:将一个原型对象传给要发动创建的对象(即客户端对象),这个要发动创建的对象通过请求原型对象复制自己来实现创建过程
        ②创建新对象(也称为克隆对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值