
设计模式
Daneeeee
这个作者很懒,什么都没留下…
展开
-
备忘录模式
备忘录模式,也叫做快照模式。常用在需要临时保存对象当前状态的场景中,如游戏中的保存进度场景。当我们需要还原时,只需要重新加载之前保存的对象即可。属于GOF定义的23种设计模式。个人认为是比较简单的一种设计模式。 需要注意的是当需要保存的对象过多或者内容过大是,使用备忘录模式就可以产生性能上的问题。优点在于,我们可以将一个对象的状态保存在对象的外部,当需要使用的时候再重新提取即原创 2016-08-17 20:06:18 · 291 阅读 · 0 评论 -
策略模式
策略模式(Pattern Strategy):封装一系列算法,根据使用的场景自动使用需要的算法。那怎么来实现呢,其实最简单的一点,如果我们抽象出一个父类,然后将具体的算法封装在具体的子类中。在调用方法中,传入需要的子类对象,那么就能自动的调用这个子类对象的具体算法了。 代码如下(此处为java代码,其他语言相似): public class t { public static void m原创 2016-08-15 11:59:16 · 369 阅读 · 0 评论 -
面向对象设计的SOLID原则、迪米特法则
SPR(The Single Responsibility Principle):单一责任原则 OCP(The Open Closed Principle):开放封闭原则 LSP(The Liskov Substitution Principe):里氏替换原则 DIP(The Dependency Inversion Principle):依赖倒置原则 ISP(The Interface原创 2016-08-15 11:59:21 · 533 阅读 · 0 评论 -
装饰设计模式
装饰设计模式:Decorator Pattern,又称装饰者模式。特点是可以在不改变这个类的情况下,动态的为其添加新的功能,在运行时动态对对象进行扩展。主要实现方式是通过将其包装成另一个对象并添加新的功能来实现动态的添加功能。也就是说,是通过另一个类来将本来的对象包裹其中。 在实现的时候需要注意使装饰对象和真实对象使用相同的接口,这样可以使客户端对象在使用的时候用相同的接口来实现交互。 适用的原创 2016-08-15 11:59:23 · 398 阅读 · 0 评论 -
代理设计模式
代理设计模式:Proxy Pattern。在真实对象与客户端对象之间加入一层中阶层,由这一 层中介来完成对真实对象的引用。 优点:可以让程序的业务逻辑更加清晰。客户端对象不需要了解真实对象的细节,所有 的调用均由代理来完成。扩展性更高。代理保护了真实对象。 常用的场景: 1. 远程代理:为一个位于不同的位置的对象提供一个本地对象的代理。 2. 虚拟代理:当需要创建一个开销较大的对象时,原创 2016-08-15 11:59:28 · 280 阅读 · 0 评论 -
工厂模式
之前总结了简单工厂模式,然后我们发现,如果需要添加一个新的产品的话,就需要对工厂就行修改,添加相应的判断语句,从而来创建需要的类型的对象。这样就提高了耦合性,维护起来也稍麻烦些。那么本文就总结下能够解决这个问题的另一种设计模式——工厂模式。 工厂模式:factory pattern。GOF定义的二十三中设计模式之一,属于创建型模式。工厂模式和简单工厂模式最大的区别在于工厂模式添加了公共的抽象工厂原创 2016-08-15 11:59:32 · 270 阅读 · 0 评论 -
摸板模式与钩子
常常会在程序中遇到多个子类有共同的方法以及相似的调用过程。这个时候我们就可以使用模板模式来解决这些重复性的工作,例如我们买东西的时候一般都是挑选商品、付款这样的步骤,区别仅仅是挑选的商品品种不一样而已,这个时候我们就可以使用模板模式。那么模板模式需要怎么来实现呢,如下图 代码如下: public class test { public static void main(String a原创 2016-08-15 11:59:37 · 241 阅读 · 0 评论 -
抽象工厂模式
当我们需要重复的创建对象的时候,通常会使用工厂模式来创建对象,这样来减轻工作量。但工厂模式的局限性在于只能够针对相同类型的产品。比如某工厂有一条生产果冻的生产线,这条生产线可以生产不同口味的果冻,这样可以很方便使用工厂模式来生成不同口味的果冻。但是如果新加入了一条生成汽水的生产线,那么整个系统就需要重新添加响应的汽水的类。这个时候就不能够很好的体现重用性了。如果我们将果冻和汽水的生产线都抽象出一个原创 2016-08-15 11:59:42 · 246 阅读 · 0 评论 -
建造者模式
建造者模式,又称生成器模式。建造者模式将复杂对象和这个对象的具体表示分离,使得相同的创建过程可以生成不同表示的对象。模板模式更多的是将具有相同执行过程的算法封装起来,使得相同的算法可以根据对象的不同产生一些不一样的地方,这与建造者模式的思维方式近乎一致。不过建造者模式讲究的是将相似对象的创建过程统一,根据具体对象的不同来具体修改。所以说建造者模式更多的是对象的创建,而且是拥有相同构造的对象。这有模原创 2016-08-15 11:59:46 · 273 阅读 · 0 评论 -
观察者模式
观察者模式:又称发布-订阅模式、模型-视图模式。一般在需要其他对象告知自己需要发生改变时使用。例如A表发生改变后,需要告知B更新数据。可以动态的实现添加多个观察者,也可以随时删除观察者。 观察者模式可以使用在需要根据一个对象的改变动态的修改其他对象,或者激发其他对象相应的事件,而同时又不清楚会有多少个对象的时候。将数据与具体的表现充分分离,符合开闭原则。但同时需要注意,如果多个观察者之间原创 2016-08-24 12:11:44 · 2019 阅读 · 0 评论 -
迭代器模式
迭代器模式提供了一系列的方式,可以让我们按照指定得顺序来访问特定集合中的每个对象,这个访问的方式可以是从前往后遍历、从后往前、访问上一个元素、下一个元素、访问集合中第一个元素、最后一个元素。 使用迭代器模式让客户端不需要了解对象中的细节,又可以让外部的对象访问到对象内部的数据。 Java和c#中都提供了自己得迭代器的基类,只需要实现这个迭代器类就可以使用。那么在C++中我们可以原创 2016-08-20 18:43:14 · 262 阅读 · 0 评论 -
访问者模式
访问者模式:常用在需要对系统添加新的功能,但是不希望破坏原有的结构,这个时候就可以使用访问者模式。使用前提是数据结构很少发生改动,同时对数据的操作可能经常会添加新的操作。 代码如下 public class test { public static void main(String[] args) { persion p=new man("mike");原创 2016-08-21 21:48:38 · 268 阅读 · 0 评论 -
状态模式
状态设计模式,GOF定义的23种设计模式之一,属于行为型模式。常用在需要根据对象的状态动态的改变队形的行为时。例如闹钟程序常见的功能,在工作日的时候会准时响起,休息日就不会打扰我们休息,这样的功能就可以使用状态模式来完成。 代码如下 public class test { public static void main(String[] args) {原创 2016-08-18 19:58:10 · 295 阅读 · 0 评论 -
简单工厂模式
简单工厂模式:Static Factory Method,又称静态工厂模式,属于创建型模式,不属于GOF的二十三种设计模式。由一个工厂对象根据传入的参数来决定最后生成的对象类型。在工厂模式的大家族中属于最简单的一种模式。 问题描述如下:已知某工资系统根据职工工种的类型来计算工资信息。公司职工有业务员、程序员、经理。 如果我们根据输入的值来自动计算工资的话,代码如下。 这里我们使用C++来描述原创 2016-08-15 11:59:07 · 212 阅读 · 0 评论