外观(Facade)模式
当使用子系统的代码时,你也许会发现自己过于深入地调用子系统的逻辑代码。如果子系统代码总是在不断变化,而你的代码却又在许多不同地方与子系统代码交互,那么随着子系统的发展,你也许会发现维护代码变得非常困难。
在项目中集成复杂的第三方代码,或在系统中逐渐形成大量仅在系统自身内部有用的代码,在这些情况下,你总可以应用外观模式,为复杂的系统创建一个简单、清晰的接口。
假设有下面一段很乱的代码,其功能是从文件中获取log信息并将它转换为对象:
我们的目的是将包含类似下面数据的文件转换为一个对象数组:
234-ladies_jumper 55
532-gents_hat 44
客户端使用该功能时要调用所有的方法:
如果在项目中直接调用这些方法,那么我们的代码会和子系统紧紧耦合在一起。当子系统变化时,或者我们决定将其与子系统完全断开时,代码就会出问题。
下面这个简单的类为上面的过程式代码提供了一个接口:
现在,从一个log文件访问Product对象就简单多了:
外观模式的好处:(1)对于调用者来说,访问代码变得简洁、非常方便.(2),由于只在一个地方调用子系统,减少了出错的可能.(3),Facade类还能使调用者避免不正确地使用内部方法,从而减少错误的发生。
PS1:这是《深入PHP:面对对象、模式与实践》第十章的部分内容(其他的都看不懂,逃~)