
设计模式C#
给我瓶叶小白
虽千万人吾往矣。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
简单工厂模式
简单工厂模式/*模式定义:定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口。简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一个条件(参数)来返回不同的类的实例。优缺点:优点:简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对 象的尴尬局面中摆脱...原创 2016-06-07 19:50:51 · 339 阅读 · 0 评论 -
中介者模式
中介者模式(Mediator Pattern): 定义一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显示地相互引用,从而使其耦合性松散, 而且可以独立地改变他们之间的交互。 使用终结者模式的场合 1.一组定义良好的对象,现在要进行复杂的通信。 2.定制一个分布在多个类中的行为,而又不想生成太多的子类。 可以看出,中介对象主要是用来封装行为的,行为的参与者就是那原创 2016-06-11 14:17:11 · 356 阅读 · 0 评论 -
访问者模式
//访问者模式 模式定义: 访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 首先我们要明确一点就是访问者模式适用于数据结构相对稳定的系统。它是将数据的操作与数据结构进行分离了,如果某个系统的数据结构相对稳定,但是操作算法易于变化的话,就比较适用适用访问者模式,因为访问者模式使得算法操作的增加变得比较简原创 2016-06-11 15:35:16 · 317 阅读 · 1 评论 -
享元模式
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。 哈希函数(Hash Function)为根据索引某些属性值(Va...原创 2016-06-11 16:28:27 · 275 阅读 · 0 评论 -
职责链模式
模式定义 职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。 职责链模式的优点 • 降低耦合度 • 可简化对象的相互连接 • 增原创 2016-06-11 20:51:01 · 399 阅读 · 0 评论 -
单例模式
主要优点: 1、提供了对唯一实例的受控访问。 2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。 3、允许可变数目的实例。 4、可以避免对资源的多重占用 5、设置全局访问点,严格控制访问 主要缺点: 1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。 2、单例类的职责过重,在一定程度上违背了“...原创 2016-06-11 21:38:04 · 415 阅读 · 0 评论 -
桥接模式
桥接模式: 将抽象部分与它的具体实现部分分离,使得他们都可以独立的变化; 通过组合的方式建立两个类之间的关系,而不是继承。 适用场景: 抽象与具体之间增加更多的灵活性 一个类存在两个或者多个独立变化的维度,且这两个或者多个维度都需要独立变化进行扩展。 不希望使用继承或者因为多层继承导致系统类的个数剧增。 桥接模式为类平行关系,组合模...原创 2016-06-11 22:00:15 · 539 阅读 · 0 评论 -
装饰者模式
//装饰模式 优点 1、装饰者模式可以提供比继承更多的灵活性 2、可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。 3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象。 ...原创 2016-06-13 21:04:47 · 427 阅读 · 0 评论 -
设计模式六大原则
六大原则 单一职责:就一个类而言,应该仅一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些指职责偶合在一起,一个职责的变化可能会削弱或者一抑制这个类完成其他这则的能力。 这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把那些职责相分离。 如果你能够想到多于一个的动机去改变一个类,那么这个类就具有过原创 2016-06-14 20:22:52 · 294 阅读 · 0 评论 -
观察者模式
观察者模式的效果有以下的优点: 第一、观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体观察者列表,每一个具体观察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者,它只知道它们都有一个共同的接口。 由于被观察者和观察者没有紧密地耦合在一起,因此它们可以属于不同的抽象化层次。如果被观察者和观察者都被扔到一起,那么这个对象必然跨越抽原创 2016-06-14 21:27:04 · 395 阅读 · 0 评论 -
组合与聚合
聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。 组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分转载 2016-06-15 10:58:07 · 734 阅读 · 0 评论 -
uml类图剪头含义
1、关联:类之间的一种关系,如学生和老师。 代码中的表示: class Student{ private Teacher mTeacher; } class Teacher{ }2、双向关联:和关联一样,不过它是两个方向的,如学生和老师,老师和学生,双向关系。 代码中表示: class Student{ private Teacher mTeacher; } clsass Teacher{ pri...转载 2018-04-12 21:51:51 · 1183 阅读 · 0 评论 -
命令模式
//命令模式 定义: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 命令模式的优点: 1. 在命令模式中, 请求者不直接与接收者交互, 即请求者不包含接收者的引用, 因此彻底消除了彼此之间的耦合. 2. 命令模式满足"开-闭"原则. 如果增加新的具体命令和该命令的接收者, 不必修改调用者的代码, 调用原创 2016-06-11 13:26:56 · 292 阅读 · 0 评论 -
迭代器模式
//迭代模式 迭代模式定义: 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部 迭代器模式的优点有: •简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。 •可以提原创 2016-06-11 10:16:24 · 328 阅读 · 0 评论 -
组合模式
//组合模式 定义: 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 优点: 1. 组合模式可以很容易的增加新的构件。 2. 使用组合模式可以使客户端变的很容易设计,因为客户端可以对组合和叶节点一视同仁。 缺点: 1. 使用组合模式后,控制树枝构件的类型不太容易。 2. 用继承的方法来增加新的行为很困原创 2016-06-10 19:17:41 · 272 阅读 · 0 评论 -
策略模式
策略模式定义了一系列算法,并将每个算法封装起来,而且他们相互替换不会使客户端感到影响。我看可以看出,策略抽象类是抽象类算法的抽象,context类聚合策略类,聚合关系表现在强的关联关系,是部分跟整体的关系。所以一般策略抽象类被context关联使用在构造函数中。 简单工厂模式与策略类差不多结构,但是context与factory之间是依赖,也就是说工厂类只是context类中的某个函数的...原创 2016-06-09 15:26:27 · 279 阅读 · 0 评论 -
代理模式
定义: 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 优点: 1)代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度。 2)代理模式在客户端和目标对象之间起到一个中介作用,这样可以起到保护目标对象的作用。代理对象也可以对目标对象调用之前进行其他操作。 缺点: 1)在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。 2)增加了系统...原创 2016-06-09 15:34:13 · 234 阅读 · 0 评论 -
工厂方法模式
工厂模式: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 与简单工程的不同:简单工功工厂哟一个factory类用于根据传入的条件,动态生成相应的实例化类并返回,这样一来,逻辑集中在类中,如果需要添加功能,那种能修改代码,不符合开闭原则,工厂方法将factory的逻辑解耦,分解成n个具体小工厂,由客户端根据需要用小工厂创建具体类,这样再以后的...原创 2016-06-09 17:13:17 · 332 阅读 · 0 评论 -
原型模式深复制浅复制
定义: 所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 在原型模式中,所发动创建的对象通过请求原型对象来拷贝原型对象自己来实现创建过程,当然所发动创建的对象需要知道原型对象的类型。这里也就是说所发动创建的对象只需要知道原型对象的类型就可以获得更多的原型实例对象,至于这些原型对象时如何创建的根本不需要关心。 适用场景: (1)类...原创 2016-06-09 19:35:06 · 436 阅读 · 0 评论 -
模板方法模式
AbstractClass是抽象类,其实也就是一种抽象模板,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,他给出了一个顶级逻辑的骨架, 而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。 ConcreteClass,实现父类所定义的一个或者多个抽象方法。每一个AbstractClass都可以有任意多个ConcreteClass与之对应,而原创 2016-06-09 20:27:45 · 324 阅读 · 0 评论 -
外观模式
优点 1、引入外观模式,是客户对子系统的使用变得简单了,减少了与子系统的关联对象,实现了子系统与客户之间 的松耦合关系。 2、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类 3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程 缺点 1、不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活原创 2016-06-09 20:56:19 · 333 阅读 · 0 评论 -
抽象工厂模式+反射+配置文件
配置文件+抽象工厂+反射 定义: 抽象工厂模式:提供一个常创建一系列相关或相相互依赖对象的接口,而无需指定他们具体的实现类 3 代码: //user类接口 interface IUser{ void insert(User user); User getUser(int id); } //用sqlserver访问user表 class SqlserverUs...原创 2016-06-09 21:02:43 · 1177 阅读 · 0 评论 -
建造者模式
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 需求分析: 1 需要生成的产品有复杂的内部结构。 2 需要生成的产品的属性相互依赖 3 建造者模式可以强迫生成顺序 4 在对象常见过程中会使用到系统中的一些其他对象,这些对象在产品对象的创建过程中不易得到。 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方原创 2016-06-09 21:43:53 · 308 阅读 · 0 评论 -
备忘录模式
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Xiangqi { //象棋原创 2016-06-09 21:52:35 · 427 阅读 · 0 评论 -
状态模式
//定义: 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。 优点 1、封装了转换规则。 2、枚举可能的状态,在枚举状态之前需要确定状态种类。 3原创 2016-06-10 15:49:58 · 289 阅读 · 0 评论 -
适配器模式
适配器模式 适配器模式分为对象适配器以及类适配器。 优点: 1、将目标类和适配者类解耦 2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性 3、灵活性和扩展性都非常好,符合开闭原则 类适配器还有的优点: 1、对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽 配者类的子类,因...原创 2016-06-10 18:07:48 · 285 阅读 · 0 评论 -
设计模式之关联,依赖,聚合,组合区别以及联系
四种关系,可以从强到弱为 依赖< 关联 <聚合 <组合,依赖很好判断,如果另个一个类的对象在引用类中表现为局部变量,方法参数、静态方法时候,判定为依赖。关联、聚合和组合需要根据上下文语义来定义。 首先看一看书上对这四种关系的定义: 依赖(Dependency)关系是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。一般而言,依赖关系在Java语言中体现为...原创 2018-04-21 20:45:20 · 3506 阅读 · 3 评论