设计模式无招胜有招之设计原理和方法
2016-06-01 15:56
267 查看
本文是“无招胜有招”的核心。首先声明这里讲的设计原理和方法基本上是基于“可扩展性”做出的。当系统面临变化的时候,如何抵挡变化对系统的冲击。
先看一个例子,如果一个类A调用了B中的一个方法,那么我们说A依赖于另一个类B。你可以想象成A骑在B身上。当B动的时候,A也要跟着动。我们的目标是B自己都跟自己的,A完全没有感觉。
面向对象设计中的多态(虚函数,动态绑定)可以实现这样的目标。所谓的多态就是保持函数signature不变的情况下,实现不同的功能。
假设有一个抽象类Animal,有两个具体类Cat和Dog。Animal中有虚函数makeSound().
我们就可如下编程
Animal animal = getAnimal()// 这个getAnimal里面可能有 new Dog()这样的语句。
animal.makeSound();
可以看到,不论狗如何变化,这里都不会变化。甚至当狗变成猫的时候,这里也不会有任何变化。
这个就是可扩展性的最基本的语法上的支持和最基本的原理。
那么怎么样使得你的代码能演变成这样的代码呢?
这里提供了几个方法。
解耦,封装变化,抽象,优先使用组合,针对接口编程
先看一个例子,如果一个类A调用了B中的一个方法,那么我们说A依赖于另一个类B。你可以想象成A骑在B身上。当B动的时候,A也要跟着动。我们的目标是B自己都跟自己的,A完全没有感觉。
面向对象设计中的多态(虚函数,动态绑定)可以实现这样的目标。所谓的多态就是保持函数signature不变的情况下,实现不同的功能。
假设有一个抽象类Animal,有两个具体类Cat和Dog。Animal中有虚函数makeSound().
我们就可如下编程
Animal animal = getAnimal()// 这个getAnimal里面可能有 new Dog()这样的语句。
animal.makeSound();
可以看到,不论狗如何变化,这里都不会变化。甚至当狗变成猫的时候,这里也不会有任何变化。
这个就是可扩展性的最基本的语法上的支持和最基本的原理。
那么怎么样使得你的代码能演变成这样的代码呢?
这里提供了几个方法。
解耦,封装变化,抽象,优先使用组合,针对接口编程
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用
- C# 设计模式系列教程-简单工厂模式