设计模式
迷惘小书童
努力,奋斗
展开
-
设计模式
设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可...转载 2018-05-23 18:35:28 · 141 阅读 · 0 评论 -
设计模式(1)——工厂模式
什么是简单工厂模式?在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用”new”关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是——封装改变,既然要封装改变,自然也就要找到改变...原创 2018-05-24 17:42:10 · 192 阅读 · 0 评论 -
设计模式(2)——抽象工厂模式
首先,我们想求一个形状的周长。定义一个形状的抽象类public abstract class Sharp{ public abstract void GetPerimeter();}然后创建两个子类,四边形类与三角形类public class Quadrilateral: Sharp{ public override void GetPerimeter() ...原创 2018-06-12 23:07:50 · 164 阅读 · 0 评论 -
设计模式(3)——建造者模式
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如如果需要一辆车,在这个实际需求中,车就是一个复杂的对象,它是由轮胎,发动机,车身等组装而成的,如果让我们买一个个零件去组装成一个车的话就很不实际,肯定是车厂干这事嘛对吧,于是这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个车厂的建造者类对象里,建造者只要负责返还给...原创 2019-01-15 16:05:08 · 102 阅读 · 0 评论 -
设计模式(4)——原型模式
原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。class Program{ static void Main(string[] args) { ShapePrototype shape = new RealProt...原创 2019-01-16 18:07:59 · 118 阅读 · 0 评论 -
设计模式(5)——单例模式
单例模式(Singleton Pattern)是 最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。public class Singleton{ private static Single...原创 2019-01-17 11:20:39 · 93 阅读 · 0 评论 -
设计模式(6)——适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。我准备用一个小例子来讲述这个适配器模式。本来是这样的,有个用USB连接的东西,突然有一天说增加了GIGE网口的连接方式,根据“开闭原则”我不想改变之前的USB类,同时,IUSB类的各种方法我们...原创 2019-01-17 19:09:12 · 219 阅读 · 0 评论 -
设计模式(7)——桥接模式
我需要测试几种形状,代码如下所示class Program{ static void Main(string[] args) { Shape shape = new Square(); shape.Show(); Console.Read(); }}abstract class Shape{ public ...原创 2019-01-21 18:33:48 · 198 阅读 · 1 评论 -
设计模式(8)——装饰者模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。同样使用了上期桥接模式的Shape的例子。class Program{ static void Main(string[] ...原创 2019-01-21 19:22:33 · 147 阅读 · 0 评论 -
设计模式(9)——组合模式
组合模式(Compisite Pattern)属于结构型设计模式之一,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。安全的组合模式class Program{ static void Main(string[] args) { Composite root = ne...原创 2019-01-25 15:02:15 · 135 阅读 · 0 评论 -
设计模式(10)——外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。用一个简单的例子来解释一下吧,电脑整机是 CPU、内存、硬盘的外观。有了外观以后,启动电脑和关闭电脑都简化了。直接 new...原创 2019-01-29 14:57:30 · 157 阅读 · 0 评论 -
设计模式(11)——享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式可以避免大量相似类的开销,在软件开发中如果需要生成大量细粒度的类实例来表示数据,如果这些实例除了几个参数外基本上都是相同的,这时候就可以使用享元模式来大幅度减少需要实例化类的数量。如果能把这些参数(指的...原创 2019-01-29 18:22:16 · 125 阅读 · 0 评论 -
设计模式(12)——代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类。下面举个案例来解释:我想买个外国的东西,我买不到,只能找代理人代购。模拟购买动作,定义一个购买动作的人类Peop...原创 2019-01-31 14:24:13 · 129 阅读 · 0 评论 -
设计模式(13)——模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。实际上这种模式就是向你介绍了为什么要使用抽象类。class Program{ static void Main(string[] args) { Camera one = new CameraOne(...原创 2019-02-01 13:28:04 · 132 阅读 · 0 评论 -
设计模式(14)——命令模式
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。首先先定义一个Command接口interface Command{ void Execute();}再定义几个Command的实现类class Circle : ...原创 2019-02-13 13:49:34 · 138 阅读 · 0 评论 -
设计模式(15)——迭代器模式
迭代器模式(Iterator Pattern)是一种非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。一共四个角色迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口具体迭代器角色(MyIteraror):具体迭代器角色实现了迭代器接口,并需要记录遍历中的当前位置。聚合角色(Container):聚合角色负责定义获得迭代器角色的接口具...原创 2019-02-13 15:18:51 · 155 阅读 · 0 评论 -
设计模式(16)——观察者模式
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用。先定义一个观察者interface Observer{ void Update(string message);...原创 2019-02-13 18:08:23 · 148 阅读 · 0 评论 -
设计模式(17)——中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。前段时间要租房子,不可避免的要跟中介打交道,不用中介的话,就要直接找一房东,首先不好找房东,一个房东就一个房子,这个不满意就要找下一个房东,麻烦,而且房东找的也不容易,不如全部委托给房产中介,付点中介...原创 2019-02-14 17:45:47 · 180 阅读 · 0 评论 -
设计模式(18)——状态模式
状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。具体状态(StopState、StartState )角色:实现抽象状态...原创 2019-02-15 15:48:24 · 145 阅读 · 0 评论 -
设计模式(19)——策略模式
策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。环境角色(Context):持有一个Strategy类的引用,本例中为AlgorithmContext。抽象策略角色(Strategy):这是一个抽象角色,通常由一个接口或抽象类来实现。此角色给出所有具体策略类所需实现的接口,本例中为Algorithm。具体策略角色(Con...原创 2019-02-15 18:22:31 · 170 阅读 · 0 评论 -
设计模式(20)——责任链模式
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。通过演示一个采购的例子,所有员工低于1000元的都可以通...原创 2019-02-15 19:01:37 · 155 阅读 · 0 评论 -
设计模式(21)——访问者模式
abstract class Element{ public abstract void Accpet(IVisitor visitor); public abstract void Print();}// 具体元素Aclass ElementA : Element{ public override void Accpet(IVisitor visitor) ...原创 2019-02-19 18:08:09 · 140 阅读 · 0 评论 -
设计模式(22)——备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。角色发起人角色:记录当前时刻的内部状态,负责创建和恢复备忘录数据。备忘录角色:负责存储发起人对象的内部状态,在进行恢复时提供给发起人需要的状态。管理者角色:负责保存备忘录对象。联系人public class ContactPerson{ public str...原创 2019-02-20 09:30:45 · 143 阅读 · 0 评论 -
设计模式(23)——解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。接下来描述一个将中文数字转化为阿拉伯数字的例子先定义一个抽象表达式public abstract class Expression{ protected Dictionary...原创 2019-02-20 11:43:04 · 116 阅读 · 0 评论