随笔分类 - 设计模式
摘要:CQRS : Command Query Responsibility Segregation 命令查询分离模式,指将对数据库的增删改操作和查询操作分离,后续可针对查询类业务和命令类业务分开处理分开优化 分离可以在上层进行,底层仍然共享表也是可以的。 另外也可以创建数据宽表来适应查询的业务。 分离后
阅读全文
摘要:观察者模式:又称发布-订阅模式、模型-视图模式。一般在需要其他对象告知自己需要发生改变时使用。例如A表发生改变后,需要告知B更新数据。可以动态的实现添加多个观察者,也可以随时删除观察者。 观察者模式可以使用在需要根据一个对象的改变动态的修改其他对象,或者激发其他对象相应的事件,而同时又不清楚会有多少
阅读全文
摘要:作用:保证当前类同时只能有一个对象存在,且这个类必须自行创建这个实例并向系统提供这个实例。 步骤: 私有化类的构造函数。 在类中使用new创建一个当前类的对象。 提供一个公开的方法,将创建的对象返回。 饿汉式: class Single { private static final Single I
阅读全文
摘要:访问者模式:常用在需要对系统添加新的功能,但是不希望破坏原有的结构,这个时候就可以使用访问者模式。使用前提是数据结构很少发生改动,同时对数据的操作可能经常会添加新的操作。 代码如下 public class test { public static void main(String[] args)
阅读全文
摘要:迭代器模式提供了一系列的方式,可以让我们按照指定得顺序来访问特定集合中的每个对象,这个访问的方式可以是从前往后遍历、从后往前、访问上一个元素、下一个元素、访问集合中第一个元素、最后一个元素。 使用迭代器模式让客户端不需要了解对象中的细节,又可以让外部的对象访问到对象内部的数据。 Java和c#中都提
阅读全文
摘要:状态设计模式,GOF定义的23种设计模式之一,属于行为型模式。常用在需要根据对象的状态动态的改变队形的行为时。例如闹钟程序常见的功能,在工作日的时候会准时响起,休息日就不会打扰我们休息,这样的功能就可以使用状态模式来完成。 代码如下 public class test { public static void main(String[] args) { run r=new run(); for(i...
阅读全文
摘要:备忘录模式 备忘录模式,也叫做快照模式。常用在需要临时保存对象当前状态的场景中,如游戏中的保存进度场景。当我们需要还原时,只需要重新加载之前保存的对象即可。属于GOF定义的23种设计模式。个人认为是比较简单的一种设计模式。 需要注意的是当需要保存的对象过多或者内容过大是,使用备忘录模式就可以产生性能
阅读全文
摘要:建造者模式,又称生成器模式。建造者模式将复杂对象和这个对象的具体表示分离,使得相同的创建过程可以生成不同表示的对象。模板模式更多的是将具有相同执行过程的算法封装起来,使得相同的算法可以根据对象的不同产生一些不一样的地方,这与建造者模式的思维方式近乎一致。不过建造者模式讲究的是将相似对象的创建过程统一
阅读全文
摘要:当我们需要重复的创建对象的时候,通常会使用工厂模式来创建对象,这样来减轻工作量。但工厂模式的局限性在于只能够针对相同类型的产品。比如某工厂有一条生产果冻的生产线,这条生产线可以生产不同口味的果冻,这样可以很方便使用工厂模式来生成不同口味的果冻。但是如果新加入了一条生成汽水的生产线,那么整个系统就需要
阅读全文
摘要:常常会在程序中遇到多个子类有共同的方法以及相似的调用过程。这个时候我们就可以使用模板模式来解决这些重复性的工作,例如我们买东西的时候一般都是挑选商品、付款这样的步骤,区别仅仅是挑选的商品品种不一样而已,这个时候我们就可以使用模板模式。那么模板模式需要怎么来实现呢,如下图 代码如下: public c
阅读全文
摘要:之前总结了简单工厂模式,然后我们发现,如果需要添加一个新的产品的话,就需要对工厂就行修改,添加相应的判断语句,从而来创建需要的类型的对象。这样就提高了耦合性,维护起来也稍麻烦些。那么本文就总结下能够解决这个问题的另一种设计模式——工厂模式。 工厂模式:factory pattern。GOF定义的二十
阅读全文
摘要:代理设计模式:Proxy Pattern。在真实对象与客户端对象之间加入一层中阶层,由这一 层中介来完成对真实对象的引用。 优点:可以让程序的业务逻辑更加清晰。客户端对象不需要了解真实对象的细节,所有 的调用均由代理来完成。扩展性更高。代理保护了真实对象。 常用的场景: 1. 远程代理:为一个位于不
阅读全文
摘要:装饰设计模式:Decorator Pattern,又称装饰者模式。特点是可以在不改变这个类的情况下,动态的为其添加新的功能,在运行时动态对对象进行扩展。主要实现方式是通过将其包装成另一个对象并添加新的功能来实现动态的添加功能。也就是说,是通过另一个类来将本来的对象包裹其中。 在实现的时候需要注意使装
阅读全文
摘要:策略模式(Pattern Strategy):封装一系列算法,根据使用的场景自动使用需要的算法。那怎么来实现呢,其实最简单的一点,如果我们抽象出一个父类,然后将具体的算法封装在具体的子类中。在调用方法中,传入需要的子类对象,那么就能自动的调用这个子类对象的具体算法了。 代码如下(此处为java代码,
阅读全文
摘要:简单工厂模式:Static Factory Method,又称静态工厂模式,属于创建型模式,不属于GOF的二十三种设计模式。由一个工厂对象根据传入的参数来决定最后生成的对象类型。在工厂模式的大家族中属于最简单的一种模式。 问题描述如下:已知某工资系统根据职工工种的类型来计算工资信息。公司职工有业务员
阅读全文