设计模式:Visitor模式

通常数据结构中保存了许多元素,然后对这些元素进行处理;然而这些处理的代码实现放在哪里,通常可能就放在表示数据结构的类中,但是如果处理方式有很多种,那么每次只要增加一种处理,就必须要去修改表示数据结构的类

Visitor模式,访问者模式;这种设计模式将数据结构和处理分离开来,编写一个表示“访问者”的类来访问数据结构中的元素,并把对各元素的处理交给访问者类,这样,当需要增加新的处理时,只需要编写新的访[……]

Read more

设计模式:Decorator模式

装饰器应该是用得比较多的,比如有一个蛋糕,加上奶油,就变成了奶油蛋糕;加上草莓,就变成草莓奶油蛋糕;加上蜡烛,就变成了生日蛋糕;虽然加了各种装饰品,但都依旧还是蛋糕,只不过加上了一些装饰后,目的也更加明确了

Decorator模式就是给对象添加装饰,和蛋糕类似,首先有一个相当于蛋糕的对象,然后不断地装饰蛋糕一样地不断给对象增加功能,就变成了使用目的更明确的对象

下面这个例子,给一个字符串添加边框装[……]

Read more

设计模式:Composite模式

组合模式,用于创造出递归结构,能够使容器和内容具有一致性

比如文件系统,文件目录里里可以放入文件,也可以放入子文件目录,同理子文件目录又可以放入文件,也可以放入子文件目录,这个文件目录就形成了一种容器结构,递归结构;虽然文件目录和文件是不同类型的对象,但是它们都可以放入到文件目录中,那么文件目录和文件可以统称为目录条目,directory entry,在目录条目中,文件目录和文件被当做是同一种对象[……]

Read more

设计模式:Strategy模式

策略模式,类似算法,属于对象的行为模式,针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,使得算法可以在不影响到客户端的情况下发生变化

下面有一个用了策略模式的例子,有点复杂,功能是让电脑玩猜拳游戏,有点自我学习的感觉

这里考虑两种猜拳的策略:

第一种策略是如果这局猜拳获胜,那么下一局也出一样的手势,WinningStrategy

第二种策略是根据上一局的手势从[……]

Read more

设计模式:Bridge模式

Bridge模式,桥接,参考网络的桥接模式,这里的功能是将类的功能层次结构和类的实现层次结构连接起来

类的层次结构:

功能层次结构

实现层次结构

功能层次结构

如果有一个Something类,如果要在Something中增加新功能,比如一个具体方法,那么可以编写一个Something的子类,比如SomethingGood类,在子类中添加具体方法,这样Something和SomethingGoo[……]

Read more

设计模式:Abstract Factory模式

抽象工厂模式,通过抽象工厂将抽象零件组装成抽象产品;不用关心零件的具体实现,而是只关心接口,使用这些接口将零件组装成产品

与之前Factory,Template Method以及Builder模式一样,具体方法的实现在子类中,但不同的是,抽象工厂模式中,子类也有一个具体的工厂,负责将具体的零件组装成具体产品

来一个具体的案例,将带有层次关系的链接制作成HTML文件

最终浏览器显示如下:

Link[……]

Read more

设计模式:Builder模式

在构建一些结构复杂的物体,比如建造一个大楼,没法一气呵成,只能先打牢地基,搭建框架,然后一层一层地盖;因此需要先构建组成这个物体的各个部分,然后分阶段给组装起来

如果需要将一个复杂对象的构建和表示分离,使得同样的构建过程可以创建不同的表示的意图时,可以使用Builder构建模式,也叫生成器模式;用Builder模式,用户只需要指定需要构建的类型就可以得到它们,而具体构建的过程和细节就不需要知道了

[……]

Read more

设计模式:Prototype模式

通常通过new关键字指定类名来生成类的对象实例,但是如果初始化一个类需要消耗非常多的资源,或者是要处理的对象太多了,过程十分复杂的情况下,就不太方便了,性能和安全性也不太好

Prototype原型模式,通过一个原型对象来指明所要创建的对象类型,然后复制这个原型对象来创建出更多同类型的对象

实现Cloneable接口:Cloneable接口的作用是在运行时通知JVM可以安全地在已经实现了此接口的类[……]

Read more

设计模式:Singleton模式

单例模式,比较简单,主要是为了提供一种创建对象的方式,涉及到一个单例模式的类,负责创建自身类型的对象,同时确保只有单个对象被创建,那么对于该唯一的对象的访问方式,可以直接访问,而不需要实例化对象来完成

因此这样来说就要求:

Singleton类只能有一个实例

Singleton类创建自身的唯一实例

Singleton类给所有其他对象提供该实例

下面的案例主要验证所创建的实例唯一

创建的类:

[……]

Read more