设计模式说明

       最近在读Head first 设计模式一书,发现归根到底指的是对于面向对象语言中多态、继承、封装的相互组合以此来降低代码耦合性,使自己的代码便于扩展及修改。

       关于书中对于提到的设计模式的总结:

1、策略模式:针对接口编程,将不确定的行为(方法)重新定义为行为(方法)集合,在集合中方法可以彼此替换,行为(方法)集合同时实现同一接口,客户端将针对接口来开发,具体实现可以由客户端决定使用何种具体方法。原则:针对接口开发、善用组合。

适用场景:同一类型的类,具体相同的方法,但是有些类的实现方法不同。

2、观察者模式:一对多的情况出现,与Android机制里面广播类似,当自己发生改变时需要告诉自己身边与些事相关的所有人。

适用场景:一个改变之后需要通知多个。

3、装饰者模式:动态的使用继承实现,在基类的基础上进行扩展,符合开放-封闭原则。类似于java I/O就的读写数据流。

适应场景:开放-封闭原则,即在不改变基础的情况下进行新功能的扩展。

4、工厂模式、抽象工厂模式:前者是创建一个对象由子类来实现具体的类,后者是创建一系列的对象不需要指明具体的使用。使用时,前都是直接创建子类对象来具体的实现,后者是创建实例化对象并将它传入对象的方法中来实现。

适用场景:前者是创造单独的产品,后者是创建一个产品的集合。两者的使用范围不相同

5、单例模式:保证对象惟一性,在使用时注意多线程同步问题,为了确保多线程中的同步情况使用单例模式有三种情况可以参考,1,在创建对象时添回synchoronized 标志符,2,直接声明单例对象,3,使用volatie 确保对象的单一并使用synchoronized来确保返回对象的惟一

public class Singleton {

    private volatile static Singleton singleton = new Singleton();
    public static Singleton getInstance()
    {
        if(singleton == null) {
            synchronized (Singleton.class) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
}

适合场景:整个应用中确保数据的惟一性,例如:数据库连接、环境变量保存等等。

6、命令模式:通过命令的方式将上层与底层的具体实现分拆开来,保证上层与底层的互不影响。命令可以使用队列方式来保存未执行的命令。

适应场景:上层与底层可以通过数据来区分开,两者的逻辑不会相互影响。

7、适配器模式:将接口转换成客户需要的接口定义,即在一方已经固定的情况下,如果有新的对象加入,但是与之前的方法不同,这时就需要使用适配器将方法进行转换

适应场景:在不改变上层或者下层调用的时候添加对于接口定义的转换。

8、外观模式:子系统向上提供统一的接口来供上层调用。这些统一的接口实现可能是由子系统中很多接口共同实现的。但是对于外在来说只有一套统一的接口。

适用场景:上层与底层分开。

9、模版模式:对于算法及其它过程的封装,将过程封装完成,具体的过程步骤由子类实现,在模版模式中可以得用勾子来对于算法过程的干涉。

适用场景:算法或者过程步骤明确

10、状态模式:根据自行的状态来改变自己的行为,将状态与步骤的关系放在一个类中,同时将步骤拆分成不同的类。添加对于程序的扩展性。与策略模式的不同在于,策略模式是由应用来判断是采取哪个方法判断的。

适用场景:完整的算法或者是过程来封装完闭,由算法内部不同的状态来判断步骤并生成结果

11、代理模式:为另一个对象提供一个替身或者占位符。远程代理,Java中的远程服务可以用RMI来注册并在客户端使用Naming来获取远程代理的应用。流程client ->Proxy->Sub->服务端实现。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值