引言
在学习设计模式之前,有几点必须要给自己和大家说一下。我真的是一个强迫症很强的人哎,前些天也在整理有关设计模式的代码,你能想象到仅仅是一个单例模式,一个最简单的设计模式我就写了将近十个的Java文件吗,妈耶,当时心态是真的要崩,除此之外我还要调试它,即使是调式好了我也不懂!!~~emmm我哭了,但是我能怎末办也不能不学了丫,不学我真的期末就挂了。。哭泣~
so,在我看了好几遍的理论知识还有代码没看懂之后,我就给自己总结出来自己一直纠结而且想要关注的点,这个部分不涉及代码,纯粹可以应付选择题,主要内容就是说这23个设计模式的区别、应用场景、简称、能解决什么问题(和生活联系以下)。对了关于应用场景可能大家基础都不一样,就比如说我我真的时很菜了,所以我就简单举一个大部分人都应该学过的例子(前面几个字总结+后面面例子),只要你把简单的例子记住了,其他的例子你之后学习了然后再回想一下就会有豁然开朗的感觉,所以请现在还很菜的我们先不要辣么纠结,让我们先把考试过了再说
好多都有组合概念
创建型模式-用于创建对象
单例模式(singleton): 只实例化一个对象+回收站
静态单例模式(staticSingleton)、双重检索、懒汉式、饿汉式、枚举
工厂模式(factory):创建者和调用者分离+JDBC创建连接和调用连接
简单工厂(simpleFactory)、工厂方法(factoryMethod)、抽象工厂(abstractFactory)
建造者模式(builder、director):构建和装配解耦+汉堡套餐、计算机组装
原型模式(prototype):创建新对象+new耗时
行为型模式-关注对象之间的交互
模板方法模式(templateMenthod):通用业务做成模板,核心业务自己实现+吃饭都要点餐和买单,但是具体吃什么自己说了算 /数据库访问封装
命令模式(command)
迭代器模式(iterator):遍历+容器、数组
观察者模式(observer):一对多+计算机网络中的广播机制
中介者模式(mediator):网状结构变成星状结构、多对多变成一对多+mvc框架中m和v都和c打交道
备忘录模式(memento):备份、事务提交+事务提交和回滚
解释器模式(interpretor):解释翻译+各类语言解释器
状态模式(state):状态不同行为不同+线程中哥哥状态转换
策略模式(strategy):分离算法+不同等级客户不同优惠
职责链模式(chainOfResponsibility):处理请求+异常抛出
访问者模式(visitor):不同对象做不同操作+xml解析 **
emmmm介个我也不是很懂**
结构型模式-关注对象之间的组织
适配器模式(adapter):将一个接口转化为另外一个接口+usb(太形象!!)
桥接模式(bridge):抽象与部分分离+JDBC驱动
装饰模式(decorateor):给对象增加新功能+ Struts2中,request,response,session对象的处理(介个如果servlet不太好的不容易理解)、咖啡加糖加奶问题(介个是老师举的例子,太适合了!~好理解)
组合模式(composite):部分和整体+树形层次结构图
外观模式(facade):为子系统提供统一接口+JDBC封装后的,commons提供的DBUtils类
享元模式(flyweight):用共享技术有效的支持大量细粒度对象的重用+黑白棋子颜色大小共享
代理器模式(proxy):其他对象提供一种代理以便控制对这个对象的访问+明星经纪人
空对象模式(Null Object Pattern)
在以上模式的分类和英文简写都完成之后接下来就是分析哪一个肯定不会考:
双重检索、解释器模式、访问者模式
(太复杂~~~~~~~~~~~~,敲代码都要好半天,如果再碰上个反射机制,完了,我哭)
设计模式原则(我也是要面子的好吧!)
1、开闭原则(Open Close Principle)
**对扩展开放,对修改关闭**。
2、里氏代换原则(Liskov Substitution Principle)
**任何基类可以出现的地方,子类一定可以出现**。
3、依赖倒转原则(Dependence Inversion Principle)
**针对接口编程,依赖于抽象而不依赖于具体。**
4、接口隔离原则(Interface Segregation Principle)
**降低类之间的耦合度**。
5、迪米特法则,又称最少知道原则(Demeter Principle)
一**个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。**
6、合成复用原则(Composite Reuse Principle)
**尽量使用合成/聚合的方式,而不是使用继承。**