首先,设计模式,来源于建筑设计的灵感。
设计模式,是高层次的、抽象的解决方案模板。可以将这个模式视为解决方案的蓝本而不是解决方案本身。从中无法找到一种可以简单应用到应用程序中的框架;相反,通常是通过重构自己的代码并将问题泛化来实现设计模式。
设计模式,不仅适用于软件开发领域,从工程建筑的所有领域都能找到他的身影。
常见设计原则:
1.简约原则(KISS);
2.不要重复自己(DRY);
3.讲述而不要询问(Tell,Don't Ask);
4.您不需要他(YAGNI);
5.分离关注点(SoC)。
S.O.L.I.D设计原则:
1.单一责任原则(SRP);
2.开放封闭原则(OCP);
3.里氏替换原则(LSP);
4.接口分离原则(ISP);
5.依赖倒置原则(DIP)。
6.依赖注入(DI)和控制反转(IoC)原则。
设计模式分组:
1.创建型:处理对象构造和引用。它们将对象实例的实例化责任从客户代码中抽象出来,从而让代码保持松散耦合,将创建复杂对象的责任放在一个地方,这遵循了单一责任原则和分离关注点原则。主要包括:
抽象工厂(Abstract Factory)模式:提供一个接口来创建一组相关的对象;
工厂方法(Factory Method)模式:支持使用一个类来委托创建有效对象的责任。
生成器(Builder )模式:将对象本身的构造分离出来,从而能够构造对象的不同版本。
原型(Prototype)模式:能够从一个原型实例来复制或克隆类,而不是创建新实例。
单例(Singleton)模式:支持一个类只实例化一次,并只有一个可用来访问它的全局访问点。
2.结构型:处理对象的组合与关系,以满足大型系统的需要。
适配器( Adapter)模式:使不兼容接口的类能够一起使用
桥接(Bridge)模式:将抽象与其显示分离,允许实现和抽象彼此独立的改变。
组合(Composite)模式:可以像对待对象的单个实例那样来对待一组表示层次结构的对象。
装饰(Decorator)模式:能够动态包装一个类并扩张其行为。
门面(Faced)模式:提供一个简单的接口并控制对一组复杂接口和子系统的访问。
享元(Flyweight)模式:提供一种在许多小类之间高效共享数据的方式。
代理(Proxy)模式:为一个实例化成本很高的更复杂的类提供一个占位符。
3.行为型:处理对象之间在责任和算法方面的通信。这个分组中的模式将复杂行为封装起来并将其从系统控制流中抽象出来,这样就使复杂系统更容易理解和维护。
责任链(Chain Of Repository)模式:允许将命令动态链接起来处理请求。
命令(Command) 模式:将一个方法封装成一个对象,并将该命令的执行与它的调用者分离。
解释器(Interpreter)模式:指定如何执行某种语言中的语句。
迭代器(Iterator)模式:提供以形式化的方式来导航集合的方法。
中介者(Mediator)模式:定义一个对象,可以让其他两个对象进行通信而不必让它们知道彼此。
备忘录(Memento)模式:允许将对象恢复到一枪的状态。
观察者(Observer)模式:定义一个或多个类在另一个类发生变化时接到报警。
状态(State)模式:允许对象通过委托给独立的、可改变的状态对象来改变自己的行为。
策略(Strategy)模式:能够将算法封装到一个类中并在运行时转换,以改变对象的行为。
模板(Template)模式:定义算法流程控制,单允许子类重写或实现执行步骤。
访问者(Visitor)模式:能够在类上执行新的功能而不影响类的结构。