模式
来源:互联网 发布:钢筋配料软件 编辑:程序博客网 时间:2024/06/11 10:36
单例模式:
在Java虚拟机中保证一个类只有唯一的实例;
特征:1:有一个私有化的静态变量;
2:有一个同步,静态的方法去得到这个对象;
3:判断是否为null,如果为null,就实例化这个对象;
4:一个私有化的构造方法;
5:对外提供唯一的访问函数;
主要分为懒汉和饿汉模式;
懒汉模式:第一次调用该方法的时候才去创建这个实例,而且需要手动实现同步;
饿汉模式:在JVM加载的时候就创建了这个实例;而且他不要手动来实现同步;
在什么情况下用相对应的单例模式呢?
如果确定这个单列模式一定会用到,而且用到的次数比较多时就用饿汉模式;
如果不确定这个单列模式会到,或者用到的几率很低的话就用懒汉模式;
单例模式的优点:
1:实例控制:单例模式防止其它对象对自己的实例化,确保所有的
对象都访问一个实例。
2:伸缩性:因为由类自己来控制实例化进程,类就在改变实例化进程上
有相应的伸缩性。
单例模式的缺点:
1:对象生命周期:单例模式没有提出对象的销毁。
2:系统开销:每次引用这个类实例的时候都要进行实例是否存在的检查。
简单工厂模式:
简单工厂模式代替了new关键字;
1:把对象的构造隐蔽了;
2:扩展性强,降低了耦合度,复用性强;
3:把设计和实现分离;
简单工厂模式的优点:
1:简单工厂模式的核心是工厂类,简单工厂模式实现了对责任的分割.
简单工厂模式的缺点:
1:这个工厂类集中了所有的产品创建逻辑,如果这个全能类不能正常工作了,
整个程序都会受到影响.
2:工厂类所有的方法都是静态的,所以对于静态的方法是无法被子类继承的。
3:当过多的逻辑放在里面的话容易引起逻辑判断错误。
简单工厂模式的例子:
当我去肯德基的时候向服务员说要一桶“全家桶”那么我就只要拿到全家桶就可以了,
其它的都不用管。
肯德基就是这个简单的工厂。
模版模式:
模板模式是父类建立骨架,子类具体实现其方法,它把不变的行为搬移到父类,
去除了子类重复的代码,它提供了一个很好的代码复用平台;
当不变的行为和可变的行为在子类中混合在一起的时候,不变的行为就会在代码中重复。
通过模版方法行为把重复的行为转移到单一的地方,这样就帮助子类摆脱重复代码的纠缠。
模版模式让子类实现模版模版的框架,又可以对局部进行微调。
模版模式的缺点:当父类的定义的流程过多的时候,就必须让每个子类来实现
它所有的抽象方法。这样如果有的方法在子类中没有用,
那么模版模式就失去了意义。
门面模式:
为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,
这个接口使得这一子系统更加容易使用。
解决问题:子接口繁多,调用复杂,内部交互地方比较多。
facade实际上是个理顺系统间关系,降低系统间耦合度的一个常用的办法。
门面模式的例子:比如说你考上了大学然后在去学校的报到的时候肯定要和很多人
来打交道,但你又不想和这些人打交道。
这时候你就想到让你的父母送你去学校,
这样自己就不要做这些人打交道了只要和自己的父母说就可以了。
策略模式:
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。
策略模式的缺点:
1.因为每个具体策略类都会产生一个新类,
所以会增加系统需要维护的类的数量。
2.在基本的策略模式中,选择所用具体实现的职责由客户端对象承担,
并转给策略模式的Context对象
策略模式的优点:
1.简化了单元测试,因为每个算法都有自己的类,可以通过自己的
接口单独测试。
2.避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。
策略模式的例子:我现在去旅行,到达目的地可以通过很多种方式到达。
观察者模式:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,
所有依赖于它的对象都得到通知并被自动更新。
解决问题:解决多个对象间相互依赖关系的相互通知。
优点:是实现了表示层和数据逻辑层的分离,并定义了稳定的更新消息传递机制,
类别清晰,并抽象了更新接口,使得可以有各种各样不同的表示层(观察者)。
缺点:是每个外观对象必须继承这个抽像出来的接口类,这样就造成了一些不方便,
比如有一个别人写的外观对象,并没有继承该抽象类,或者接口不对
,我们又希望不修改该类直接使用它。虽然可以再应用Adapter模式来一
定程度上解决这个问题,但是会造成更加复杂烦琐的设计,增加出错几率。
例子:OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,
tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,
我们作为订阅者(观察者)就可以及时收到情报啦
适配器模式: 将一个类的接口转换成客户希望的另外一个接口。
使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
类适配器:继承过来的话耦合度会很高,因为会把所有的东西全都继承下来了。
对象适配器:对象的话我只用到哪种就调哪个方法。
作用:把两个没有关联的类组合起来用,使用适配器模式把两个类的接口之间
加一个混合接口。
例子:水龙头和水管口径不一致需要用到一个转换接口。
装饰器模式:
定义:动态地给一个对象添加一些额外的职责。就增加功能来说,
Decorator模式相比生成子类更为灵活。
优点:装饰器与继承的目的都是扩展对象的功能,但装饰器提供了比继承更大的灵活性,
可以动态的决定是“粘上”还是“去掉”一个装饰。通过使用不同的具体装饰类和这些
类的排列组合,可以创建出很多不同行为的组合。
缺点:装饰器比继承关系使用更少的类,但比继承关系使用更多的对象,
更多的对象会使查错变得更困难,特别是这些对象看上去很像的时候。
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 模式
- 【模式模式】模式总结
- 外模式、模式、内模式
- 一个多线程web服务器实例(C,Linux,详细的web服务器原理) 转
- 单例模式(Singleton)
- 智能手机用好5元包30M的GPRS流量之一(大盘走势)
- Linux 学习笔记, 比较乱的那种
- 在 Tree 中查找节点
- 模式
- 3:40 pm 的 一杯水和8粒药丸
- 动态显示/隐藏 DataGrid 的列
- MyEclipse不编译问题的解决
- ffmpeg移植到andriod
- 关于Visual Assist X(VC助手)几个最新版本的比较与破解下载——更新到10.5.1727.0
- 做电子商务必要的一环
- Tomcat学习
- 如何将java中class文件反编译成java文件