设计模式之 facade与flyweight

facade是外观的意思,啥意思呢?这个模式主要是针对子系统的复杂类的情况下,通过它可以提供一个简单的功能类。比如目前做的dlna库,写了好几个接口,而且基本上只有我知道是怎么个用法。但是dlna的客户端真得需要了解这么复杂的东西吗?不用,所以后面单独弄了一个dlna类,接口非常简单。这个就是facade的目的,把子系统的功能积聚到一个简单的类中去。注意,facade和之前的adapter等目的明显不同,这个是为了屏蔽子系统的复杂性而做的。

 

flyweight,是轻量级的意思,感觉这个模式的名字没取好啊,其实就是对象共享的设计模式,啥意思?有些重复对象就别老new了,把他们放到一个pool中,想要的时候去取就好了。flyweight相对于内存使用而言的轻重。这个模式其实设计起来比较难。主要有以下几个点:

1 一般而言,共享对象某个属性改了的话,会影响到其他使用者,那么,哪些属性定义为共享对象之内(intrinsic),哪些属性定义为共享对象之外呢(extrinsic)?

flyweight类层次也比较多,需要存在flyweight的接口,毕竟共享对象难道一直就只有一类?还要有flyweight的工厂类,这个用于控制共享对象的引用计数的,也必须要的吧?

 

你可能感兴趣的:(设计模式)