模式

来源:互联网 发布:钢筋配料软件 编辑:程序博客网 时间: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模式相比生成子类更为灵活。   

               优点:装饰器与继承的目的都是扩展对象的功能,但装饰器提供了比继承更大的灵活性,
                        可以动态的决定是“粘上”还是“去掉”一个装饰。通过使用不同的具体装饰类和这些
                        类的排列组合,可以创建出很多不同行为的组合。

         缺点:装饰器比继承关系使用更少的类,但比继承关系使用更多的对象,
              更多的对象会使查错变得更困难,特别是这些对象看上去很像的时候。

原创粉丝点击