Posts
JieChen.Me
Cancel

Mediator有调停和斡旋的意思,在设计模式中可以用来做统一管理。设想一个系统中有多个组件,每个组件之间可能相互耦合、交互。如果添加一个新的组件进来,有可能要对所有已经存在的每一个组件都要修改,以使得老的组件能够和新的组件做交互。 这种强耦合造成的问题是修改范围太广,牵扯太大,很难扩展或缩编。如果有一个统一的中间部门做调和,所有的事情交给这个部门做,就能解决强耦合的问题,杜绝组件之间的直...

Chain of Responsibility,从名字看,就是在一个链条上部署了多个责任部门,每个部门只负责自己的那块,各司其职,绝不越权,处理完后,丢给下一个部门处理。有时候也可以修改这个责任链的逻辑,就是在责任链上找到正确的部门处理完后,马上退出其他部门的处理。 这两种情况,非常类似于我们日常生活中的现象:去政府部门一站式窗口办事,第一个窗口是首要窗口,处理完后,到第二个窗口,再到第三...

首先了解一个开闭原则,对扩展开放,对修改关闭。也就是永远考虑扩展的可能,尽量不要修改类的原始定义。 由此想到一种常见的情形。 DTO (Data Transfer Object)是用来在不同的处理层交换数据的最简单的类对象,它可以被序列化。在某些情况下,我们可能在这个类的基础上,想要进行额外的复杂的处理,由于DTO的使用遵循最简单的原理,不推荐在DTO中直接添加额外方法,所以复杂操作可以这...

实例的创建一般都是通过 new 方法初始化出来的。但是在一些比如下面的复杂情况下,生成一个类实例并不是一件容易的事情。 构造函数的实现太过复杂 构造函数的实现太耗费资源 需要创建大量的非常雷同的实例 如果我们能将一个已经创建出来的类实例保存起来,下次再创建一个新的时候直接从某个地方拿出来用,极大简化这个创建过程。这个就是Pr...

类似于工厂的流水线,或者审批流程的工作流,很多类为了实现某个功能,会将一系列的子方法组合起来,形成一套固定的模板,暴露出一个公共方法。调用者只要调用这个公共方法即可实现功能。 对于类扩展而言,子类沿用父类的这个公共方法,但是这个方法里面的各个子方法的实现,可以有多种体现: 父类定义子方法,禁止子类override 父类定义子类的抽象方法,要求子类必须实...

Iterator模式存在的意义在于给调用者按照顺序依次访问集合/容器内的元素的,他可以实现: 调用者负责往集合或者容器内塞东西,不用关心这个容器的具体实现 调用者可以从容器内获取东西 调用者可以按照顺序获取容器内的全部东西 对调用者而言,它只关心面向它的那个容器,和容器提供给他的一个迭代器。这样的好处是,容器可以修改它内部的实现,不用通知迭代器,更不用通知调用者。迭代器又...

Singleton单例模式,应该是最简单的创建型的模式。它要求在运行时期间,只存在唯一的一个实例,不允许有多个实例的可能。 需要注意不好的单例模式可能会存在线程不安全的问题:当构造函数需要比较长的时间时,多个调用会同时调用到 new Singleton(),因为此时的_instance仍然为null private static Singleton _instance; public ...

Builder 模式和抽象工厂模式非常相像。区别在于: 抽象工厂模式: 抽象工厂模式要实现的功能是: 让消费者指定具体工厂,交给Client调用抽象工厂的接口方法,将一组多个抽象的零件组合成一个抽象的产品。 构造模式 让消费者指定具体工厂,交给监督者Director调用抽象工厂的部分或全部接口,将部分或者全部零件(或者不同的过程)组装成一个抽象产品,并直...

抽象工厂模式的目的是为了应对一组factory,他们生产各自的一组零件。Client只负责调用工厂接口的方法,组合成产品。至于是哪个工厂负责生产这些零件,Client不需要知道,他只要能够接受外部传入进来的具体的工厂即可。一句话解释:抽象工厂模式要实现的功能是: 让消费者指定具体工厂,交给Client调用抽象工厂的接口方法,将一组多个抽象的零件组合成一个抽象的产品。 抽象工厂模式和工厂方法...

这两种工厂模式,目的是通过一个工厂类,创建一个具体的对象。但是何时创建,以及在哪里创建,创建哪种对象,有很大区别。 简单工厂:由工厂类根据输入的参数,来选择创建何种对象。对象是在工厂的某个方法内直接创建的。具体的创建何种对象,由输入参数决定。如果有多种不同的对象,创建的方法会通过switch语句来选择,容易引起代码膨胀。 工厂方法:创建对象不再在工厂类中...