怎么学习建设网站,代理IP做网站,东莞城乡建设,网站建设维护 知乎面向对象设计模式是”好的面向对象设计“#xff0c;所谓”好的面向对象设计“指的是可以满足”应对变化#xff0c;提高复用“的设计。 现代软件设计的特征是”需求的频繁变化“。设计模式的要点是”寻求变化点#xff0c;然后在变化点处应用设计模式#xff0c;从而更好地… 面向对象设计模式是”好的面向对象设计“所谓”好的面向对象设计“指的是可以满足”应对变化提高复用“的设计。 现代软件设计的特征是”需求的频繁变化“。设计模式的要点是”寻求变化点然后在变化点处应用设计模式从而更好地应对需求的变化“。”什么时候什么地点应用设计模式“比设计模式结构本身”更重要。
重构关键技巧 静态-动态 早绑定-晚绑定 继承-组合 编译时依赖-运行时依赖 紧耦合-松耦合
“组件协作”模式 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”“组件协作”模式通过晚绑定来实现框架与应用程序之间的松耦合是二者之间协作时常用的模式。 典型的有模板方法策略模式观察者模式
一、模板方法(Template Method)
动机 在软件构建过程中对于某一项任务它常常有稳定的整体操作结构但各个子步骤却有很多改变的需求或者由于固定的原因而无法和任务的整体结构同时实现。 那么如何在确定稳定操作结构的前提下来灵活应对各个子步骤的变化或者晚期实现需求呢
例子 实现一个整体框架固定但有两个步骤的具体实现多变的程序。 方法一 该方法将整体框架写在主函数里应用程序和框架分开写。 方法二 该方法将整体运行框架也写在库里面并且将由应用程序定义的步骤写成虚函数让应用程序开发人员来重写以实现晚绑定的效果。 模式定义 定义一个操作中的算法的骨架稳定而将一些步骤延迟变化到子类中。Template Method使得子类可以不改变复用一个算法的结构即可重定义override 重写该算法的某些特定步骤。
结构 总结 Template Method模式是一种非常基础的设计模式在面向对象系统中有大量的应用。它用最简单的机制虚函数的多态性为很多应用程序框架提供了灵活的扩展点是代码复用方面的基本实现结构。 除了可以灵活应对子步骤的变化外“不要调用我让我来调用你”的反向控制结构是Template Method的典型应用。
二、策略模式(Strategy)
动机 在软件构建过程中某些对象使用的算法可能多种多样经常改变如果将这些算法都编写到对象中将会使对象变得异常复杂而且有时支持不使用的算法也是一个性能负担。 那么如何在运行时根据需要透明地更改对象的算法将算法与对象本身解耦从而避免上述问题呢
例子 实现一个计算税收的类根据不同的国家有不同的计算方法。 方法一 该方法是最容易想到的利用一系列if..else来选择不同的算法。但是这样一旦有新的需求就需要修改源代码这不符合开放封闭原则。 方法二 该方法将算法写成一个接口在类里通过多态实现算法的晚绑定这样在有新的需求时只需写一个类实现接口即可符合开闭原则。
模式定义 定义一系列算法把它们一个个封装起来并且使它们可互相替换变化。该模式使得算法可独立于使用它们的客户程序稳定而变化扩展子类化。
结构 总结 Strategy及其子类为组件提供了一系列可重用的算法从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。 Strategy模式提供了用条件判断语句外的另一种选择消除条件判断语句就是在解耦合。含有许多条件判断语句的代码通常需要Strategy模式。
三、观察者模式(Observer)
动机 在软件构建过程中我们需要为某些对象建立一种“通知依赖关系”——一个对象的状态发生变化所有的依赖对象都将得到通知。如果这样的依赖关系过于紧密将使软件不能很好地抵御变化。 使用面向对象技术可以将这种依赖关系淡化并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。
例子 实现一个分割文件的类希望能通过进度条等方式看到分割的进度。 方法一 该方法直接绑定到一个进度条的类这不符合依赖倒置原则当需要其他方式表示进度的时候需要修改代码。 方法二 这种方法既可以实现松耦合又可以使用多种通知方式。
模式定义 定义对象间的一种一对多的依赖关系以便当一个对象的状态发生改变时所有依赖于它的对象都得到通知并自动更新。
结构 总结 使用面向对象的抽象Observer模式使得我们可以独立地改变目标与观察者从而使二者之间的依赖关系达到松耦合。 目标发送通知时无需指定观察者通知会自动传播。 观察者自己决定是否需要订阅通知目标对象对此一无所知。 Observer模式是基于事件的UI框架中非常常用的设计模式也是MVC模式的一个重要组成部分。