设计模式复习总结
OO设计原则: 1、针对接口编程,不是针对实现编程;
2、把不变化的封装起来;
3、多用组合,少用继承;
4、类对扩展开放,对修改关闭;
5、为对象之间的松耦合设计而努力;
6、依赖抽象,不要依赖具体的类;
7、最少知识原则:只和你的朋友谈;
8、别找我,我会找你(超类主控一切);
观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象状态改变时,一来它的对象都回收到通知,并产生相应的操作。(ps:Java内置的Listen就是此模式)
装饰者模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(ps:Java的IO流就是此模式)
工厂方法模式:定义了一个创建相关或依赖对象的家族,而不需要明确的制定具体类。(ps:工厂方法使用继承,允许将实例化延迟到子类)
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的“家族”,而不需要明确的制定具体类。(ps:抽象工厂模式使用对象的组合,创建相关的对象家族不需要依赖它们的具体类)
单件模式:确保一个类只有一个实例,并提供全局的访问点。(Java中使用私有的静态构造方法,使用多线程时注意线程同步问题)
命令模式:将请求封装成对象,这可以让你使用不同的请求、队列,伙这日志请求来参数化其他对象。命令模式也可以支持撤销操作。(命令模式将发出请求的对象和执行请求的对象解耦,也可以用于实现日志和事务系统)
适配器模式:将一个类的接口,装换成客户希望另一个接口。适配器让原本不兼容的类可以合作无间。(必须有接口,有类适配器和对象适配器,其中类适配器要用到多重继承)
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。(注意和装饰者模式的区别:外观模式是包装一群接口来简化接口,装饰者模式是包装对象来增加行为)
模版方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(钩子是方法,策略模式用组合,模版方法用继承)
迭代器模式:提供一种方法顺序的访问一个聚合对象中的各个元素,而又不暴露其内部表示。(依赖聚合提供便利,迭代器是一个接口)
组合模式:允许你将对象组成树形结构来表示“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合。(让一个类只分配一个责任)
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像是修改了类。(只允许一个对象拥有可变的状态,策略模式是用行为或算法来配置类,状态模式是允许类跟着状态的改变而改变行为)
代理模式:为一个对象提供一个替身或者占位符以访问这个对象。(代理有控制和管理访问的功能,并且分为多种代理,比如动态代理、远程代理等)
桥接模式:不只改变你的实现,也改变你的抽象。(实现和抽象放在两个不同的类层次中而使它们可以独立访问)
生成器模式:封装一个产品的构造过程,并允许按步骤构造;
责任链模式:一个以上的对象要处理同一个请求的时候。
蝇量模式:让一个实例能用来提供许多“虚拟实例”。
解释器模式:为语言创建解释器。(语法规则)
中介者模式:集中相关对象之间复杂的沟通和控制方式。(简化系统维护)
备忘录模式:让对象返回之前的状态。(备忘录放在外面,维护内聚,Java考虑使用序列化机制存储系统状态)
原型模式:创建给定类的实例过程很昂贵或很复杂,使用此模式。(允许使用克隆即复制来创建实例,想客户隐藏创建实例的复杂性)
OO设计原则: 1、针对接口编程,不是针对实现编程;
2、把不变化的封装起来;
3、多用组合,少用继承;
4、类对扩展开放,对修改关闭;
5、为对象之间的松耦合设计而努力;
6、依赖抽象,不要依赖具体的类;
7、最少知识原则:只和你的朋友谈;
8、别找我,我会找你(超类主控一切);
9、类应该只有一个改变的理由;
要点:可复用性、可维护性、可扩充性;设计模式是解决设计问题的通用方法,换言之就是解决问题的途径。
观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象状态改变时,一来它的对象都回收到通知,并产生相应的操作。(ps:Java内置的Listen就是此模式)
装饰者模式:动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。(ps:Java的IO流就是此模式)
工厂方法模式:定义了一个创建相关或依赖对象的家族,而不需要明确的制定具体类。(ps:工厂方法使用继承,允许将实例化延迟到子类)
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的“家族”,而不需要明确的制定具体类。(ps:抽象工厂模式使用对象的组合,创建相关的对象家族不需要依赖它们的具体类)
单件模式:确保一个类只有一个实例,并提供全局的访问点。(Java中使用私有的静态构造方法,使用多线程时注意线程同步问题)
命令模式:将请求封装成对象,这可以让你使用不同的请求、队列,伙这日志请求来参数化其他对象。命令模式也可以支持撤销操作。(命令模式将发出请求的对象和执行请求的对象解耦,也可以用于实现日志和事务系统)
适配器模式:将一个类的接口,装换成客户希望另一个接口。适配器让原本不兼容的类可以合作无间。(必须有接口,有类适配器和对象适配器,其中类适配器要用到多重继承)
外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。(注意和装饰者模式的区别:外观模式是包装一群接口来简化接口,装饰者模式是包装对象来增加行为)
模版方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(钩子是方法,策略模式用组合,模版方法用继承)
迭代器模式:提供一种方法顺序的访问一个聚合对象中的各个元素,而又不暴露其内部表示。(依赖聚合提供便利,迭代器是一个接口)
组合模式:允许你将对象组成树形结构来表示“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合。(让一个类只分配一个责任)
状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像是修改了类。(只允许一个对象拥有可变的状态,策略模式是用行为或算法来配置类,状态模式是允许类跟着状态的改变而改变行为)
代理模式:为一个对象提供一个替身或者占位符以访问这个对象。(代理有控制和管理访问的功能,并且分为多种代理,比如动态代理、远程代理等)
桥接模式:不只改变你的实现,也改变你的抽象。(实现和抽象放在两个不同的类层次中而使它们可以独立访问)
生成器模式:封装一个产品的构造过程,并允许按步骤构造;
责任链模式:一个以上的对象要处理同一个请求的时候。
蝇量模式:让一个实例能用来提供许多“虚拟实例”。
解释器模式:为语言创建解释器。(语法规则)
中介者模式:集中相关对象之间复杂的沟通和控制方式。(简化系统维护)
备忘录模式:让对象返回之前的状态。(备忘录放在外面,维护内聚,Java考虑使用序列化机制存储系统状态)
原型模式:创建给定类的实例过程很昂贵或很复杂,使用此模式。(允许使用克隆即复制来创建实例,想客户隐藏创建实例的复杂性)