写在本系列最前面:
在以前的印象中,设计模式似乎是一个非常高大上的东东,但是呢,要想从一个码农进阶到一个工程师,怎么能绕过这东西呢。无奈,找各种设计模式的书来看,得益于自己学习过多种语言的经验,先后学习了java,php,javascript里的设计模式后,总算对设计模式有了一知半解的了解,于是乎,想着将自己理解的东西记录一下,以便后用(健忘症必备技能)。
为什么学习设计模式
1、设计可复用的面向对象的应用;(按套路出牌不会吃亏)
2、提高编程效率,减少重复编码;(不是复制粘贴)
3、帮助编程者快速确定系统的解决方案;(复用或稍微修改下以前的方案)
4、帮助构建模块化系统,降低模块之间耦合度;(牵一发不用动全身)
关于设计模式本身
模式名称:能够形象的表示该模式的核心功能或效果
问题:该模式能够解决哪些问题
解决方案:该模式具体的工作原理与方式
效果:使用该模式设计之后较不使用该模式有什么明显的提升效果;
以后学习每一种模式也都针对这四点去吃透它!
更多的准备工作
1、模式依据目的可分为:
创建型:与对象的创建有关,基本模式为工厂方法模式;
结构型:处理类或对象的组合,基本模式为代理模式;
行为型:对类或对象怎样交互和怎样分配职责进行描述,基本模式为注册模式;
2、依据作用范围,分为类模式和对象模式。类模式处理类和子类之间的关系,编译时已经确定;对象模式处理对象间的关系,更具动态性
3、客户请求是使对象执行操作的唯一方法,操作又是对象改变内部数据的唯一方法;
4、严格反映当前现实世界的模型并不能产生也能反映将来世界的系统——所以我们需要更高层次的抽象类。
5、所谓对象的粒度指的是对象的大小和数目上的度量结果。
6、发送给对象的请求和它的相应操作在运行时刻的连接就称之为动态绑定
7、动态绑定允许你在运行时刻彼此替换有相同接口的对象,这种可替换性称为多态
8、对象的实现由类决定,类指定了对象的内部数据和表示,也定义了对象所能完成的操作。对象通过类的实例化来创建。
9、新的类可通过继承已存在的类来定义(注意,对象是创建,而类是定义!!),子类继承父类时包含了父类定义的所有数据和操作。子类的实例对象包含所有子类和父类定义的数据,且他们能完成子类和父类定义的所有操作。
10、抽象类的目的是:为它的子类定义公共接口。抽象类将它的//部分或全部//(注意,这里可以是部分,意味着抽象类可以在自身中实现部分操作)操作的实现延迟到子类中(这些操作就不用再抽象类自身中去实现,就是写一个空方法)。
11、抽象类不能被实例化!!!
12、在抽象类中定义却没有实现的操作被称为抽象操作。
13、混入类(mixin)是给其他类提供可选择的接口或功能的类,它不能被实例化,并且要求多继承。
14、针对接口编程,而不是针对实现编程。
不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。
15、面向对象系统中功能复用的两种最常用的技术是类继承和对象组合。
16、类继承可以比较方便地改变被复用的实现,但它无法再运行时改变继承自父类的实现,而且破坏了封装性,因为父类对子类暴漏了细节,并且父类的改变必然引起子类的变化,增加了耦合。
17、对象组合是通过获得对其他对象的引用而在运行时刻动态定义的。由于“黑箱复用”的特性,对象彼此间通过接口引用,并不破坏封装性,而且,它能减少类继承的规模。
18、优先使用对象组合,而不是类继承。
理想情况下,你不应为获得复用而去创建新的构件,因为使用对象组合技术可以获得你需要的功能。
19、委托是一种组合方法,它使组合具有与继承同样的复用能力。接受请求的对象将操作委托给它的代理者(类似于子类将请求交给它的父类处理)。委托方式为了使被委托的操作可以引用接受请求的对象,将自己传给委托者(相当于this引用)。
版权声明:本文为博主原创文章,未经博主允许不得转载。