(50)C#设计模式总结

创建型模式

创建型模式就是用来创建对象的模式,抽象了实例化的过程。所有的创建型模式都有两个共同点。

  1. 都将系统使用哪些具体类的信息封装起来
  2. 隐藏了这些类实例时如何被创建和组织的

单例模式
解决的是对象实例化的个数问题,比如抽象工厂中的工厂,对象池等,除了Singleton之外,其他创建型模式解决的都是new所带来的耦合关系。

单例模式指的是确保某一个类只有一个实例,并提供一个全局的访问点。实现要点:

  1. 类只有一个实例,通过私有构造函数来保证类外部不能对类进行实例化
  2. 提供一个全局访问点,创建一个返回该类对象的静态方法
  3. 详细实现过程

工厂方法模式
工厂方法模式指的是定义一个创建对象的工厂接口,由子类决定要实例化的类,将实际创建工作推迟到子类中。它强调的是单个对象的变化,实现要点有:

  1. 定义一个工程接口:声明一个工厂抽象类
  2. 有具体子类创建对下你给:创建派生于工厂抽象类,即由具体工厂去创建具体产品,既然要创建产品,自然就需要产品抽象类和具体产品类。
  3. 详细实现过程

抽象工厂模式
抽象工厂模式指的是提供一个创建一系列相关或相互依赖对象的接口,使得客户端可以在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象,强调的是 系列对象 的变化,实现要点:

  1. 提供一些列对象的接口:提供多个产品的抽象接口
  2. 创建多个产品族中的多个产品对象:每个具体工厂创建一个产品组中的多个产品对象,多个具体工厂就可以创建多个产品族中的多个对象了。
  3. 详细实现过程

简单工厂模式
简单工厂模式指的是提供一个接口,用来根据传入参数的不同来创建不同的具体产品对象。强调的是动态创建产品对象,实现要点:

  1. 提供一个接口:声明一个工厂类
  2. 动态创建具体产品:根据传入的参数不同,动态决定创建哪一种具体产品
  3. 详细实现过程

建造者模式
建造者模式指的是将一个产品的内部表示和产品的构造过程分隔开来,从而可以使一个建造过程生成具体不同的内部表示的产品对象。强调的是产品的构造过程,实现要点:

  1. 将产品的内部表示与产品的构造过程分隔开:不要把产品的构造过程放在产品类中,而是由建造者类来负责构造过程,产品的内部表示放在产品类中,这样就分隔开了
  2. 详细实现过程

结构型模式

结构型模式,顾名思义讨论的是类和对象的结构,主要用来处理类或对象的组合。它包括两种类型,一种是类结构型模式,指的是用继承机制来组合接口或实现;而是对象结构型模式,指的是通过组合对象的方式来实现新的功能。

适配器模式
适配器模式意在转换接口,它能够使原本不能在一起工作的两个类一起工作,所以经常用来在类库的复用、代码迁移等方面。例如DataAdapter类就应用了适配器模式。适配器模式包括类适配器模式和对象适配器模式。详细实现过程

桥接模式
桥接模式旨在将抽象化与现实化解耦,使得两者可以独立地变化。意思是说,桥接模式把原来基类的实现化细节再进一步进行抽象,构造到一个实现化的结构中,然后再把原来的基类改造成一个抽象化的等级结构,这样就可以实现系统在多个维度的独立变化。详细实现过程

装饰者模式

装饰者模式可以动态地给一个对象添加一些额外的功能,装饰者模式较继承生成子类的方式更加灵活。虽然装饰者模式能够动态的将职责附加到对象上,但它也会造成产生一些细小的对象,增加了系统的复杂度。详细实现过程

组合模式
组合模式将对象组合成树形结构,用来表示整体与部分的关系。组合模式使得客户端将单个对象和组合对象同等对待。如在.NET中WinForm中的控件,TextBox、Label等简单控件继承与Control类,同时GroupBox这样的组合控件也是继承于Control类。详细实现过程

外观模式
在系统中,客户端经常需要与多个子系统进行交互,这样导致客户端会随着子系统的变化而变化,此时可以使用外观模式把客户端与各个子系统解耦。外观模式指的是为子系统中的一组接口提供一个一致的门面,它提供了一个高层接口,这个接口使子系统更加容易使用。如电信的客户专员,你可以让客户专员来完成冲话费,修改套餐等业务,而不需要自己去与各个子系统进行交互。详细实现过程

享元模式
在系统中,如果我们需要重复使用某个对象时,此时如果重复地使用new操作符来创建这个对象的话,这对系统资源是一个极大的浪费,既然每次使用的都是同一个对象,为什么不对其共享呢?这也是享元模式出现的原因。

享元模式运用共享技术有效地支持细粒度的对象,使其进行共享。在.NET类库中,String类的实现就使用了享元模式,String类采用字符串驻留池的方法来使字符串进行共享。详细实现过程

代理模式
在系统开发中,有些对象由于网络或其他障碍,以至于不能直接对其访问,此时可以通过一个代理对象来实现对目标对象的访问。

代理模式指的是给某一个对象提供一个代理,并由代理对象控制对原对象的访问。详细实现过程

注意:外观模式、适配器模式和代理模式的区别?

这个三个模式的相同之处是:他们都作为客户端与真实被使用的类或系统之间的一个中间层,起到让客户端简介调用真实类或系统的作用,不同之处在于,所应用的场合和意图不同

代理模式与外观模式的主要区别在于,代理对象无法直接访问,只能有代理对象提供访问,而外观对象提供对各个子系统简化访问调用接口,而适配器模式则不需要虚构一个代理者,目的是复用原有的接口。外观模式是定义新的接口,而适配器模式则是复用一个原有的接口。

另外,他们应用设计的不同阶段,外观模式用于设计的前期,因为系统需要前期就需要依赖外观,而适配器应用于设计完成之后,当发现设计完成的类无法协同工作时,可以采用适配器模式。然而很多情况下在设计初期就需要考虑适配器模式的使用,如涉及到大量第三方应用接口的情况;代理模式是设计完成情况下,想以服务的方式提供给其他客户端调用,此时其他客户端可以使用代理模式来对模块进行访问。

总之,代理模式提供与真实类一致的接口,旨在用来代理类访问真实的类,外观模式旨在简化接口,适配器旨在转换接口。

行为型模式

行为型模式是对在不同对象之间划分责任和算法的抽象化。行为模式不仅仅关于类和对象,还关于它们之间的相互作用。行为型模式又分为类的行为模式和对象的行为模式两种

  • 类的行为模式——使用继承关系在几个类之家分配行为
  • 对象的行为模式——使用对象聚合的方式来分配行为

模板方法模式
模板方法模式是在一个抽象类中定义一个操作中的算法骨架,而将一些具体步骤实现延迟到子类中去实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法的特定步骤,从而达到复用代码的效果。
详细实现过程

命令模式
命令模式属于对象的行为模式,命令模式把一个请求或者操作封装到一个对象中,通过对命令的抽象化来使得发出命令的责任和执行命令的责任分开。命令模式的实现可以提供命令的撤销和恢复功能。
详细实现过程

迭代器模式
迭代器模式是针对集合对象而生的,对于集合对象而言,必然涉及到集合元素的添加、删除和遍历等操作,此时如果把遍历操作也放在集合对象的话,集合对象就承担太多的责任了,此时可以进行责任分离,把集合的遍历放在一个对象中,这个对象就是迭代器对象。

迭代器模式提供了一种方法来顺序访问一个集合对象中各个元素,而又无需暴露该对象的内部表示,这样既可以做到不暴露集合的内部结构,又可以让外部代码透明地访问集合内部元素。
详细实现过程

观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己的行为。
详细实现过程

中介者模式
中介者模式定义了一个中介对象来封装一些列对象之间的交互关系。中介者使各个对象之间不需要显式地相互应用,从而是耦合性降低,而且可以独立地改变它们之间的交互行为。
详细实现过程

状态者模式
每个对象都会有对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多行为,那么这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新的状态时,需要更改之间现有的代码,显然违背了开闭原则。状态者模式——允许一个对象在其内部状态改变时自动改变其行为,对象看起来就像是改变了它的类。
详细实现过程

策略模式
策略模式是对算法的包装,是把使用的算法的责任和算法本身分开,为派给不同的对象负责。策略模式通常把一些列的算法包装到一些列的策略类里面。用一句话概括就是——“将每个算法封装到不同的策略类中,使得它们可以互换”。
详细实现过程

责任链模式
某个请求需要多个对象进行处理,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链子,并沿着这条链子传递该请求,直到有对象处理它为止。
详细实现过程

访问者模式
访问者模式是封装一些施加于某种数据结构之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于数据结构之上的操作之间的耦合度降低,使得操作集合可以相对自由的改变。
详细实现过程

备忘录模式
备忘录模式是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以把该对象恢复到原先的状态。
详细实现过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值