C# 设计模式系列视频教程

  • 共 25 个视频教程

第25期-设计模式总结

  • 2019/7/24 13:43 | 99分钟
  • VIP

设计模式建立在对系统变化点的基础上进行,哪里有变化点,哪里应用设计模式,设计模式应该以演化的方式来获得,系统的变化点往往是经过不断演化才能准确定位,不能为了模式而模式,设计模式是一种软件设计的软力量,而非规范标准,不应夸大设计模式的作用。

18468次播放

第24期-Visitor访问者模式

  • 2019/7/24 13:36 | 82分钟
  • VIP

类层次结构中可能经常由于引入新的操作,从而将类型变得脆弱,由于需求的改变,某些类层次结构中常常需要增加新的行为方法,如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。

18450次播放

第23期-Strategy策略模式

  • 2019/7/24 13:31 | 72分钟
  • VIP

对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。策略模式定义一系列算法,把它们一个个封装起来,并且使它们可互相替换,该模式使得算法可独立于使用它的客户而变化。

18440次播放

第22期-State状态模式

  • 2019/7/24 13:24 | 80分钟
  • VIP

对象拥有不同的状态,往往会行使不同的行为,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同,如何在运行时根据对象的状态来透明地更改对象的行为,而不会为对象操作和状态转化之间引入紧耦合?状态模式允许一个对象在其内部状态改变时改变它的行为,从而使对象看起来似乎修改了其行为。

18448次播放

第21期-Memento备忘录模式

  • 2019/7/24 13:19 | 75分钟
  • VIP

对象状态的变化无端,如何回溯或恢复对象在某个点的状态?某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态,如果使用一些公有接口来让其它对象得到对象的状态,便会暴露对象的细节实现,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。

18443次播放

第20期-ChainOfResponsibility职责链模式

  • 2019/7/23 11:05 | 72分钟
  • VIP

一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。

15625次播放

第19期-Observer观察者模式

  • 2019/7/23 10:53 | 82分钟
  • VIP

我们需要为某些对象建立一种通知依赖关系,当目标对象的状态发生改变,所有的依赖对象都将得到通知,如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系,从而实现软件体系结构的松耦合,定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新,学习 .NET 框架中的观察者模式。

14222次播放

第18期-Iterator迭代器模式

  • 2019/7/23 10:45 | 76分钟
  • VIP

集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素,同时这种透明遍历也为同一种算法在多种集合对象上进行操作提供了可能。使用面向对象技术将这种遍历机制抽象为迭代器对象为应对变化中的集合对象提供了一种优雅的方式。迭代器模式可提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

14216次播放

第17期-Mediator中介者模式

  • 2019/7/22 13:57 | 75分钟
  • VIP

在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可使用一个中介对象来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。学习 .NET 架构中的中介者模式。

18470次播放

第16期-Interpreter解释器模式

  • 2019/7/22 13:52 | 75分钟
  • VIP

在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。关于 .NET 架构中的解释器模式。

18470次播放

第15期-Command命令模式

  • 2019/7/22 13:45 | 79分钟
  • VIP

耦合是软件不能抵御变化灾难的根本性原因,不仅实体对象与实体对象之间存在耦合关系,实体对象与行为操作之间也存在耦合关系。在软件构建过程中,行为请求者与实现者通常呈现一种紧耦合,但在某些场合,这种无法抵御变化的紧耦合是不合适的,命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作,关于.NET 架构中的命令模式。

18473次播放

第14期-TemplateMethod模板方法模式

  • 2019/7/19 18:08 | 90分钟
  • VIP

如果你只想掌握一种设计模式,那么它就是模板方法,变化是软件设计的永恒主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现系统中的变化点和稳定点,并使用特定的设计方法来应对这种变化,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,关于 .NET 框架中模板方法模式的应用。

25613次播放

第13期-Proxy代理模式

  • 2019/7/19 17:43 | 85分钟
  • VIP

人们对于复杂的软件系统常常有一种处理手法,即增加一层间接层,从而对系统获得一种更为灵活并满足特定需求的解决方案,在面向对象系统中,有些对象由于某种原因,直接访问会给使用者或者系统结构带来很多麻烦,如何在不失去透明操作对象的同时来管理控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式,代理模式为其它对象提供一种代理以控制对这个对象的访问,在 .NET 架构中关于代理模式的应用。

24191次播放

第12期-Flyweight享元模式

  • 2019/7/19 17:34 | 78分钟
  • VIP

面向对象很好地解决了系统抽象性的问题,在大多数情况下,也不会损及系统的性能,但是,在某些特殊的应用中,由于对象的数量太多,采用面向对象会给系统带来难以承受的内存开销,如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?运用共享技术有效地支持大量细粒度的对象,关于 .NET 架构中的享元模式的应用。

24183次播放

第11期-Facade外观模式

  • 2019/7/18 15:54 | 79分钟
  • VIP

如何简化外部客户程序与系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一个子系统更加容易使用,从客户程序的角度来看,外观模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种解耦的效果。

21364次播放

第10期-Decorator装饰模式

  • 2019/7/18 15:34 | 88分钟
  • VIP

子类复子类,子类何其多,过度使用了继承来扩展对象的功能,使得这种扩展方式缺乏灵活性,并且随着子类的增多,各种子类的组合会导致更多子类的膨胀,装饰模式可动态地给一个对象增加一些额外的职责,就增加功能而言,装饰模式比生成子类更为灵活,理解 .NET 框架中关于装饰模式的应用,

21373次播放

第09期-Composite组合模式

  • 2019/7/18 15:23 | 85分钟
  • VIP

在面向对象系统中,我们常会遇到一类具有容器特征的对象,它们在充当对象的同时,又是其它对象的容器,客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构的变化将引起客户代码的频繁变化,组合模式将对象组合成树形结构以表示部分与整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性,组合模式在 .NET 框架中的应用。

21370次播放

第08期-Bridge桥接模式

  • 2019/7/18 15:09 | 81分钟
  • VIP

将抽象部分与实现部分分离,使它们都可以独立地变化,桥接模式使用对象间的组合关系解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化,桥接模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则,复用性比较差,桥接模式是比多继承方案更好的解决方法。

21366次播放

第07期-Adapter适配器模式

  • 2019/7/18 14:35 | 82分钟
  • VIP

适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口,在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的,如何应对这种迁移的变化?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?将一个类的接口转换成客户希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,写个示例演示适配器模式,对象适配器与类适配器的结构,适配器模式在.NET框架中的的应用。

19947次播放

第06期-Prototype原型模式

  • 2019/7/18 14:24 | 89分钟
  • VIP

抽象不应该依赖于实现细节,实现细节应该依赖于抽象,如何应对需求的变化,如何向客户程序隔离出这些易变对象,从而使得依赖这些易变对象的客户程序不随着需求改变而改变,使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象,原型模式的要点,有关创建型模式的讨论。

19954次播放

第05期-FactoryMethod工厂方法模式

  • 2019/7/17 13:41 | 102分钟
  • VIP

耦合关系直接决定着软件面对变化时的行为,模块与模块之间的紧耦合使得软件面对变化时,相关的模块都要随之更改,模块与模块之间的松耦合使得软件面对变化时,一些模块更容易被替换或者更改,但其它模块保持不变,在软件系统中,经常面临着某个对象的创建工作,由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的实例化延迟到子类,理解工厂方法模式的要点,关于 .NET 框架中工厂方法模式的应用。

18562次播放

第04期-Builder生成器模式

  • 2019/7/17 13:21 | 85分钟
  • VIP

在软件系统中,有时候面临着一个复杂对象的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定,将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示,关于 .NET 框架中 Builder 模式的应用。

18545次播放

第03期-AbstractFactory抽象工厂模式

  • 2019/7/17 13:07 | 89分钟
  • VIP

常规的对象创建方法不能应对具体实例化类型的变化,封装变化点,哪里变化,封装哪里,工厂模式的缘起,面向接口编程,而非依赖实现,创建一系列相互依赖的对象,认识简单工厂的问题,使用面向对象的技术来封装变化点,提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类,游戏框架中的抽象工厂模式应用,理解 .NET 框架中的抽象工厂模式的应用。

18549次播放

第02期-Singleton单例模式

  • 2019/7/17 7:25 | 90分钟
  • VIP

从目的来看,设计模式分为创建型、结构型和行为型,从范围来看,类模式处理类与子类的静态关系,对象模式处理对象间的动态关系,单例模式可保证一个类仅有一个实例,并提供一个该实例的全局访问点,单线程与多线程单例模式的实现,使用 .NET 类型初始化机制实现多线程单例模式,关于单例模式的扩展方案,学习 .NET 框架中单例模式的应用。

10029次播放

第01期-面向对象设计模式与原则

  • 2019/7/16 21:36 | 111分钟
  • VIP

了解 GoF 23 种设计模,设计模式与面向对象的关系,从编程语言直观了解面向对象,理解封装、继承和多态,从一个 C# 示例开始,重新认识面向对象,从设计原则到设计模式的演变,针对接口编程,而不是针对实现编程,优先使用对象组合,而不是类继承,封装变化点,使用重构得到模式,SRP 单一职责原,OCP 开放封闭原,LSP 里氏替换原则,DIP 依赖倒置原则,ISP 接口隔离原则。

29951次播放