您的位置:首页 > 其它

设计模式学习心得

2015-06-06 15:00 218 查看
 

1,简单工厂模式:用一个工厂类专门来new各种产品。引用一个产品类的接口,用if。。。else。。。来区分不同产品。但是每当有新的产品时必须修改工厂类的代码。P117

2,工厂方法模式与抽象工厂模式:工厂方法模式有一个抽象工厂而且每个实际工厂只生产一个产品,两层工厂,两层产品。抽象工厂模式将产品进行更具体的分类,每个实际的工厂不在是生产一种产品,而是生产几种一类的产品,两层工厂,三层产品。
工厂模式统一管理对象的产生,在大项目中脉络清晰。


工厂方法UML

 


抽象工厂UML 

3,创建者模式:抽象工厂模式的延伸,抽象工厂模式将工厂进行了分类,一个工厂可以制造出一系列的产品。而这些产品需要组装时,为了减小客户端压力,新建一个创建者,为创建者选择一个工厂当做参数,指定好工厂后,创建者可以生产产品并进行组装,客户端要选择好工厂类型,把产品的生产和组装都交给创建者。

4,原型模式:使用clone方法。当一个对象产生并且已经设定好成员变量时,此时调用clone,可以生产一个成员变量完全相同的对象。并且新产生的对象与原对象相互独立。Clone方法是Object中的方法,但是必须实现cloneable接口才可以使用。1,浅clone,类的成员变量无引用类型时,可以实现clone。深度clone。2,当成员变量中有引用类型则为深度clone,此时需要重写clone方法,手动将引用类型的成员变量clone一下即可。

5单例模式:懒汉和饿汉
注意:类的构造函数设为私有;持有的自身引用和getinstance方法均为static
单例模式的七种写法。http://cantellow.iteye.com/blog/838473,其中第三种和第五种效率最高,第五种更节省资源。

6观察者模式:一个事件源对应多个观察者,事件源有一个列表存放观察者,观察者可以添加和删除列表中的自己。事件源发生变化时会逐个调用观察者的updata函数实现通知而不是观察者一直盯着事件源。除此之外,事件源和观察者无任何关系,这是松耦合.Awt和swing的事件处理。

7,策略模式:对只有行为不同的各种方法或者算法进行单独的类封装,有客户端决定使用哪一种算法。比如数组排序的10中算法,对一种物品进行打折的多种方法。
组合的思想:P22页的图。因为飞行和呱呱叫并不是所有鸭子都有的行为,所以没有在duck类中直接将这两个行为写成方法让子类继承,而是把这两个行为封装成接口,在duck中作为成员变量引用该接口,然后子类继承duck后,用到这些行为时给引用赋值具体实现即可。P16
继承和组合:http://www.xuebuyuan.com/365430.html,只有在子类需要大量复用父类已实现的方法并且父类不会太大变化时用继承

8,状态模式与责任链模式:不同之处,状态模式在封装的过程中指定状态间的关联顺序,客户端发出动作实现状态的切换。而责任链模式需要客户端指定关联循序,但客户观无法控制状态的转换。

9,装饰模式:被装饰类与装饰类有共同的祖先,所以可以实现递归嵌套。

10,命令模式:对方法进行封装,可以进行撤销的undo方法

11,adapter模式:转换接口P240  如果想把一只鸡转化为鸭子,那么需要一个适配器类实现鸭子接口,并在类中引用鸡接口,在实现鸭子的方法中调用鸡的方法。这样客户端引用鸭子接口并赋予一个适配器的实现类,还能使鸡和鸭子松耦合。


 

12,模板方法模式:对一个算法的某些步骤进行控制,而不是整个算法进行控制(策略模式),适合于多个有相同步骤的算法。

13,迭代器模式:支持iterator的容器(list)直接调用即可,不支持的(数组)需要实现iterator接口,然后写一个自己的iterator。

14,组合模式:表示树状结构的模式,叶子结点和中间节点实现同一个接口但重写不同的方法。用递归实现遍历

15:代理模式:代理中有一个受控对象的引用并对受控对象的方法进行封装和调用,代理和受控对象实现相同的接口。如果client想访问受控对象的方法时,不是直接访问受控对象,而是通过访问代理间接访问受控对象。比如买火车票,我不是亲自去车站买,而是通过票贩子来买,票贩子出来需要买车票还需要收取我的钱,此处票贩子为代理,我是客户端,火车站是受控对象。代理对象的方法 = 增强处理 + 被代理对象的方法。
动态代理:http://www.cnblogs.com/linjiqin/archive/2011/02/18/1957600.html
代理类不需要再引用被控对象,也不需要和被控对象实现相同接口,通过反射动态产生代理
java.lang.reflect包中

Proxy:提供用于创建动态代理类和代理类实例的静态方法,他是创建出的动态代理类的超类。
InvocationHandle:里面的invoke方法存放需要进行加工处理的代码。

16:桥接模式:当出现多重继承时,考虑将一个类分为两个,并建立连接。比如生产汽车,有车辆的种类和品牌需要考虑,就将种类和品牌分为两个类,然后让这两个类建立联系共同生产汽车

17,蝇量模式:当系统中有大量重复对象时,可使用次模式。原理为将多个引用指向同一个对象。

18,备忘录:让备忘录对象存储当前对象成员变量的信息,当前对象改编后,还可以从备忘录中恢复原来的值

19,中介者:让一系列对象解耦,把一系列对象之间复杂的通信关系放到中介对象中完成。
20,MVC:http://www.cnblogs.com/lyp3314/archive/2013/01/24/2875853.html
优点:分工明确,松耦合,重用性高(多个视图用一个模型)
缺点:结构复杂,执行效率低,原本直接就可访问数据库,现在要经过控制器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: