Decorator Pattern其实早就接触过了,从java的输入语句中可见一斑InputStream in = new BufferedInputStream(new FileInputStream(“test.txt”)); 其中BufferedInputStream 和FileInputStream 都是InputStream的子类,通过包含关系,让外围的类包含内部那个类的功能及数据,说的形象一点,就是在内部那个类外面加了一层装饰。这也是装饰模型最核心的概念。
Factory Pattern
书中举了匹萨店的例子,一开始的类,将制作不同类型匹萨的方法都包含在里面,整个类显得很冗余。顺着正常的思路,将制作匹萨的方法从这个类里面剥离出去单独形成一个类,这个类就像生产对象的工厂,只要你告诉它该生产的产品的型号,它就生产对应的对象再发送给客户。
按照书中的例子,如果匹萨店开在同一个城市以内,匹萨的风味多样,那么上述的模式很好地实现了上面的功能。但如果是连锁店,每个地方的风味不同呢?……
是的,每个地方的风味不同,但同一个地方不同匹萨的种类却相当有限。也就是说可以有一个匹萨店父类,然后各地的分店是这个父类的子类。而其中最重要的制作匹萨的方法在父类中被声明为虚函数,由各个具体的子类来实现。这样“工厂”又被搬回具体的类中间。
具体如何使用,我个人觉得是要看情况的。上面两个是工厂模式的两种表现形式。
对于后一种模式,里面用到的对象,比如例子中匹萨的原材料,同样可以用工厂模式来实现,这样程序的结构就相当灵活了。