设计模式概述:
总体来说基本的23种设计模式分为三大类
创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式(7种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
面向对象编程(杂)
所有编程初学者都会有这样的问题,就是碰到问题就直觉地用计算机能够理解的逻辑来描述和表达待解决问题及具体的求解过程,这其实是用计算机的方式去思考,比如计算器这个程序,先要求输入两个数和运算符号,然后根据运算符号判断如何运算,得到结果,这本身没有错,但这样的思维却使得我们的程序只为满足实现当前的需求,程序不容易维护,不容易扩展,更不容易复用。从而达不到高质量代码的要求。
如何才能容易维护,容易扩展,又容易复用呢? 例:活字印刷术:改:只需改相应字(可维护),创造出这些字用完以后就并非无用,完全可以在后来的印刷中重复使用(可复用),若要加字,只需另刻字即可(可扩展),同时实现了字体的横向摆放或纵向摆放问题(灵活性好),活字印刷是思想的成功,面向对象(将每个字当做一个对象来处理)的胜利。
面向对象编程设计思想:通过封装,继承,多态把程序的耦合度降低。
复制VS复用:
编程有一原则,就是用尽可能的办法去避免重复,以计算器为例,我们可以让计算和显示分开(哪些与控制台相关,哪些与计算相关)(实际就是让业务逻辑和界面逻辑分开,让他们之间的耦合度下降,只有分离开,才可以容易达到维护和扩展。)
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。例:打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一个类。
面向对象设计其实就是希望做到代码的责任分解,方法很长是坏味道!如果一个方法很长,而且有很多判断分支,这就意味着它的责任过大了,无论任何状态,都需要通过它来改变,这实际上是很糟糕的。
总结面向对象实际上就两句话:一是松耦合(Coupling),二是高内聚(Cohesion)。面向对象系统追求的目标就是尽可能地提高系统模块内部的内聚(Cohesion)、尽可能降低模块间的耦合(Coupling)。然而这也是面向对象设计过程中最难把握的部分。
敏捷开发原则(待续)
目录
设计模式原则:https://www.cnblogs.com/study-hard-forever/p/13167154.html
23种设计模式UML图:https://www.cnblogs.com/study-hard-forever/p/13167161.html
1、简单工厂模式:https://www.cnblogs.com/study-hard-forever/p/13160933.html
2、策略模式:https://www.cnblogs.com/study-hard-forever/p/13160936.html
3、装饰模式:https://www.cnblogs.com/study-hard-forever/p/13160940.html
4、代理模式:https://www.cnblogs.com/study-hard-forever/p/13160945.html
5、工厂方法模式:https://www.cnblogs.com/study-hard-forever/p/13160950.html
6、原型模式:https://www.cnblogs.com/study-hard-forever/p/13160972.html
7、模板方法模式:https://www.cnblogs.com/study-hard-forever/p/13160973.html
8、外观(门面)模式:https://www.cnblogs.com/study-hard-forever/p/13160974.html
9、建造者(生成器)模式:https://www.cnblogs.com/study-hard-forever/p/13160976.html
10、观察者模式:https://www.cnblogs.com/study-hard-forever/p/13160978.html
11、抽象工厂模式:https://www.cnblogs.com/study-hard-forever/p/13166668.html
12、状态模式:https://www.cnblogs.com/study-hard-forever/p/13166672.html
13、适配器模式:https://www.cnblogs.com/study-hard-forever/p/13166675.html
14、备忘录模式:https://www.cnblogs.com/study-hard-forever/p/13166685.html
15、组合模式:https://www.cnblogs.com/study-hard-forever/p/13166688.html
16、迭代器模式:https://www.cnblogs.com/study-hard-forever/p/13166697.html
17、单例模式:https://www.cnblogs.com/study-hard-forever/p/13166704.html
18、桥接模式:https://www.cnblogs.com/study-hard-forever/p/13166709.html
19、命令模式:https://www.cnblogs.com/study-hard-forever/p/13166718.html
20、职责链模式:https://www.cnblogs.com/study-hard-forever/p/13167130.html
21、中介者模式:https://www.cnblogs.com/study-hard-forever/p/13167134.html
22、享元模式:https://www.cnblogs.com/study-hard-forever/p/13167137.html
23、访问者模式:https://www.cnblogs.com/study-hard-forever/p/13167144.html
文章作为个人笔记,仅限学习交流使用,参考自《大话设计模式》与菜鸟教程——设计模式及部分其他资料,绝无其他意图。
这是最基础的23种设计模式,设计模式还有很多,如果以后有机会我会继续补充。上述文章的讲解比较浅显,在这之后我会继续学习,以后有机会会把设计模式与项目实例或者源码结合后再谈设计模式,我想那个时候应该设计思路就变得很明朗了吧。
只要真正深入地理解了设计原则,很多设计模式其实就是原则的应用而已,或许在不经意间就在使用设计模式了。
有的人说设计模式没有必要去学习,因为小白学了也只明其形不知其理,根本就不会用到实际开发中,大佬也没有必要学,因为已经在用了。
调侃一句,还挺有道理的(谬论,为懒惰找的借口~ 大佬曾经也是小白啊~ 小白不学习,哪来的大佬~
生活还在继续,编程也不会结束,我们对程序、对爱情、对理想、对人生的讨论和思考还在继续。 ——《大话设计模式》
推荐资料(电子版:书籍/笔记总结)
(选择一个适合自己的去学就是了,设计模式的讲解有很多,但是挑一个适合自己的才是最重要的):
菜鸟教程:设计模式:https://www.runoob.com/design-pattern/design-pattern-tutorial.html
C语言中文网:Java设计模式:23种设计模式全面解析(超级详细):http://c.biancheng.net/design_pattern/
廖雪峰的官方网站:设计模式:https://www.liaoxuefeng.com/wiki/1252599548343744/1264742167474528
图说设计模式:https://design-patterns.readthedocs.io/zh_CN/latest/index.html#
设计模式总结:https://www.jianshu.com/p/35bff7612c83
JAVA设计模式总结之23种设计模式:https://www.cnblogs.com/pony1223/p/7608955.html
一句话总结23种设计模式:https://zhuanlan.zhihu.com/p/57662279
某武汉大学计算机学院硕士研究生关于设计模式的笔记讲解(pdf可支持下载):设计模式精解-GoF 23 种设计模式解析附 C++实现源码:http://ccftp.scu.edu.cn/Download/038c70a8-c724-4b86-91c3-74b927b1d492.pdf
生活不止眼前的苟且,还有将来的苟且,偶尔带一些诗和远方~ 加油,奥利给!