常见的几种设计模式概述。定义:
模式的定义:在某种情景(context)下,这很对某问题的某种解决方案。可理解为:处于某种情景下,面对着想要达到的目标被一群约束影响着的问题,然而,却可以应用某个设计,克服这些约束并达到该目标(意味着可重复应用来解决问题),将你领向某个设计方案。
1、策略模式(strategy Pattern) :定义算法族,让它们之间可以互相替换,此模式让算法的的变化独立于使用算法的客户。所体现的设计原则是封装变化,少用继承,多用组合,针对接口编程,不针对具体实现编程。
2、观察者模式(Observer Pattern):定义了对象之间的一对多依赖,这样一来,当主题对象(被观察者)改变状态时,它的所有依赖者(观察者)都会收到通知并自动更新。所体现的设计原则是:为交互对象之间的松耦合设计而努力。
3、装饰者模式(decorator Pattern):动态的将责任附加到对象上。若要扩展功能或者责任,装饰者提供了比继承更有弹性的替代方案。该模式可以在所委托被装饰者的行为之前与/或之后,加上自己的行为。以达到特殊的目的。通常采用的是抽象类方式,Java中可以使用接口,但会导致设计中出现许多小对象。所体现的设计原则是对扩展开放,对修改关闭。
4、工厂模式(Factory Pattern):所涉及到设计原则是依赖抽象,不要依赖具体类(依赖倒置原则)。
4.1简单工厂模式(Factory Pattern):定义一个创建对象的接口,但由子类决定要实例化的类的是哪一个。工厂方法让类吧实例化推迟到子类,其实并不是严格意义上的设计注模式。注:负责一个产品的创建,子类实现工厂方法完成产品的创建(很明显采用继承创建)。
4.2抽象工厂模式(AbstractFactory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。注:负责一组的产品的创建,其中每个产品的创建都采用简单工厂模式的方法来实现。
5、单例模式(Singleton Pattern):用来创建独一无二的,只能有一个实例的对象。确保一个类只有一个实例,并提供一个全局访问点。几种实现方式
6、命令模式(Command Pattern):将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其它对象。命令模式也支持可撤销的操作。
7、适配器模式(Adapter Pattern):将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。分为对象适配器和类适配器
对象适配器采用组合的适配方式,既可以适配某个类,也可以适配该类的任何子类。
类适配器采用多重继承的适配方式,Java不支持。只能适配某个特定的被适配类,但是不需要重新实现整个被适配类,可以直接覆盖被适配类。
8、外观模式(Facade Pattern):提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。所体现的设计原则是最少知识原则。
9、模板方法模式(Template Method Pattern):在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤(子类实现)。所体现的设计原则是好莱坞原则:别调用我们,我们会调用你(采用继承方式,为了防止子类改变模板方法中的算法,可以将模板方法声明 为final)。
10、迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。迭代器模式吧在元素之间游走的责任交给迭代器,而是不会是聚合对象。所体现的设计原则是单一原则:一个类应该只有一个引起变化的原因。
11、组合模式(composite Pattern):允许你讲对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。通常采用树形结构。
12、状态模式(State Pattern):允许对象在内部状态改变是改变他的行为,对象看起来好像修改了它的类(允许一个对象基于内部状态而拥有不同的行为)。使用状态模式通常会导致设计中类的数目大量增加。
13、代理模式(Proxy Pattern):为另一个对象提供一个替身或占位符以控制对这个对象的访问。
经典的MVC复合模式:Model采用观察者模式,View采用组合模式,Control采用策略模式。。
分类:
创建型模式:涉及到将对象实例化,这类模式都提供一个方法,将客户从所需要的实例化的对象中解耦。主要有:Abstract Factory,Factory Method,Singleton。
行为型模式:都涉及到类和对象如何交互及分配职责。主要有:State ,Strategy , Observer , Template Method , Command , Iterator
结构型模式:可以让你把类或者对象组合到更大的结构中。主要有:Composite,,Adapter ,Decorator , Facade , Proxy