作为一个专业的开发人员,我们不能以单纯的完成指定功能为目的去设计程序。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性(扩展性)。这样,当未来需求发生变化的时候,我们就可以从容的解决。
在真实的项目中,专家是如何设计程序的呢 ?面对特定的设计问题,他们更愿意复用以前使用过的解决方案。所以,你会在许多面向对象系统中看到类和相互通信的对象(java中对象之间通过方法调用的方式互相通信)的重复模式。这些模式可以解决特定的设计问题,使面向对象设计更灵活、优雅、复用性更好。
这些重复的模式我们把他叫做设计模式。简单讲,设计模式就是老一辈开发人员总结下来的面向对象的软件设计经验。每一个设计模式都描述了面向对象系统中一个重要且重复出现的设计。我们给他一个形象的命名,以便我们可以有一个讨论设计的通用语言。
设计模式的核心理念是封装变化,(用抽象)解耦具体实现。将程序中可能变化的部分封装到具体类中,使用抽象技术,解藕程序和具体类的实现。这样,当未来的需求发生变化,我们就可以在不改动核心程序流程的情况下,扩展程序的实现。
所谓的使用抽象技术也就是遵循面向接口编程原则。接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口的本身反映了系统设计人员对系统的抽象理解。所以,遵循面向接口编程原则开发的程序不耦合具体的业务实现。
通过使用设计模式我们可以更好的解决程序中的代码复用问题。设计模式中强调,代码复用,组合优先于继承。
1.类继承 允许你根据其他类(父类)的实现来定义另一个类的实现。这种通过生成子类的复用通常被称为白箱复用。
2.对象组合 是另外一种复用选择。新的更复杂的功能可以通过组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用。
注:术语 “白箱”、”黑箱” 是相对对象可视性而言的
说到组合我们就不得不提到一个重要的概念 "委托"。
委托是一种组合方法,它使组合具有与继承同样的复用能力。在委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给它的代理者。
想跟我一起学习,精通设计模式,欢迎加qq群 787655326