随笔分类 -  设计模式

学习设计模式,写出更加优雅的代码,让程序更健壮。
摘要:Template Method Pattern 模板方法模式组成对象: AbstractClass:定义并实现模板方法,声明模板方法中使用到的特定步骤,需要延迟到子类实现的,则为抽象方法。(模板方法是不可变的,可为密封) ConcreteClass:实现抽象方法,这样就将相应的实现延迟到了子类 模板 阅读全文
posted @ 2016-02-23 15:22 蘑菇mr 阅读(211) 评论(0) 推荐(0)
摘要:组成 Originator(发起者):需要对状态进行保存和读取的成员 Memotor(备忘录):备忘录对象中包含存储发起人状态的成员变量 Caretaker(备忘录管理者):用于管理备忘录对象的实现类 类图 实例类图 代码 1 /// <summary> 2 /// 游戏场景 3 /// </sum 阅读全文
posted @ 2016-02-19 17:37 蘑菇mr 阅读(268) 评论(0) 推荐(0)
摘要:装饰器模式是一个结构型设计模式 模式类图 实例类图 1 interface IHumburger 2 { 3 double GetPrice(); 4 string Name { get; } 5 } 6 7 class ChickenHumbuger : IHumburger 8 { 9 publ 阅读全文
posted @ 2016-02-18 13:52 蘑菇mr 阅读(185) 评论(0) 推荐(0)
摘要:状态模式是一种行为型设计模式 当对象在不同的状态下会有不同的表现形式或者处理,那么这个时候可以使用状态模式来把复杂的判断的逻辑分散在各个类之中。 环境类(Context): 定义客户感兴趣的接口。维护一个ConcreteState子类的实例,这个实例定义初始状态。 抽象状态类(State): 定义一 阅读全文
posted @ 2016-01-18 17:51 蘑菇mr 阅读(244) 评论(0) 推荐(0)
摘要:实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。例如:超时收银员根据普通客户还是Vip客户来选择是否打折,类图由下所示策略模式的优点有:1. 将策略分开,每一种策略可以独立变化,而且提供了一个策略管理类,。2. 提供继承的方式来封装算法,实现了动态... 阅读全文
posted @ 2015-06-01 15:11 蘑菇mr 阅读(190) 评论(0) 推荐(0)
摘要:工厂模式与简单工厂模式非常相似。可以看出简单工厂模式,如果有添加一个新的实体类,那么就需要去修改工厂类中的方法,增加一个对应的语句来输出对应的对象。这样就违背了开放封闭的原则。工厂模式就是为了解决这个问题。抽象一个工厂接口,对应的一种实体类那么就有对应的一个实体工厂。通过这样的方式,那么就避免了去修... 阅读全文
posted @ 2015-05-29 17:44 蘑菇mr 阅读(327) 评论(0) 推荐(0)
摘要:What:SimpleFactroyPattern,由一个工厂类根据传入的参数,动态的决定创建哪一个产品类(这些产品类继承自一个类或者接口)。Why:封装创建对象的细节,客户端调用时只需要关注所需的对象,而不必关心创建的细节,减少类之间的依赖。How:简单工厂中包含的角色及其职责工厂类(Factor... 阅读全文
posted @ 2015-01-13 22:07 蘑菇mr 阅读(242) 评论(0) 推荐(0)
摘要:What Interface Segregation Principle(ISP):客户端不应该依赖它不需要的接口;类间的依赖关系应该建立在最小的接口上 Why “不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它... 阅读全文
posted @ 2014-12-31 02:14 蘑菇mr 阅读(1496) 评论(0) 推荐(0)
摘要:What Least Konwledge Principle(LCP):最少知识原则,一个对象应该对其他的对象了解的最少。 Why 降低系统的耦合度,使类与类之间保持松散的耦合关系。 How 员工类 class Employee { private strin... 阅读全文
posted @ 2014-12-30 13:37 蘑菇mr 阅读(296) 评论(0) 推荐(0)
摘要:What Dependence Inversion Principle(DIP):高层模块不应该依赖底层模块,都应该依赖于抽象;抽象不应该依赖于具体,具体依赖于抽象 Why 若高层依赖于底层,那么底层的变动也会导致高层的变动,这就会导致模块的复用性降低而且大大提高了开发的成本。若是依赖于抽... 阅读全文
posted @ 2014-12-30 00:37 蘑菇mr 阅读(3269) 评论(0) 推荐(0)
摘要:What Liskov Substitution Principle(LSP),任何父类出现的地方,子类一定可以出现。 Why LSP是OCP原则的规范。OCP原则的关键的是抽象,而继承关系又是抽象的一种具体表现。 How 当子类不能完整的实现父类父类的方法,那么建议断开父子关系,采用... 阅读全文
posted @ 2014-12-29 16:28 蘑菇mr 阅读(292) 评论(0) 推荐(0)
摘要:What 开放封闭原则(Open-Closed Principle:OCP),对于扩展是开放的,对于修改是封闭的。软件设计的目标:封装变化、降低耦合,而OCP正是这目标最直接的提现之一。 Why OCP优点就是不会对已有的代码造成影响,减小测试的范围,以及代码的稳定性。 How 下面不... 阅读全文
posted @ 2014-12-28 23:38 蘑菇mr 阅读(1094) 评论(0) 推荐(0)
摘要:1.怎么接触到设计模式: 是由朋友推荐,这位朋友给了我很多编程方面的指导,很感谢他,然后书荒的时候,就往这方面看了。 2.通过什么途径学习: 程杰老师编写的《大话设计模式》,李建忠老师主讲的设计模式的视频,也看了很多相关内容的博客。 3.学习设计模式的必要性: 有一种观点认为必要去专门... 阅读全文
posted @ 2014-12-26 09:46 蘑菇mr 阅读(236) 评论(0) 推荐(0)
摘要:超前的设计或者过度的设计都不是良好的设计,很多时候我们等到代码在第一次变化的时候可以及时作出反应。 What 就一个类(接口、结构体、方法等等)而言,应该仅有一个引起它变化的原因。 Why 软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离。单一职责原则可以使类的复杂度降低,实... 阅读全文
posted @ 2014-12-26 09:45 蘑菇mr 阅读(3570) 评论(1) 推荐(0)