原则篇
面向对象原则:分为单一职责原则、开放-封闭原则、依赖倒转原则、里氏转换原则、合成复用原则、接口隔离原则、迪米特法则
详情点击链接:https://blog.csdn.net/dopdkfsds/article/details/87275301
创建型模式
是什么?
处理对象创建的设计模式,主要由两个主导思想构成;一是将系统使用的具体类封装起来,二是隐藏这些具体类的实例创建和结合的方式。
创建型模式又分为对象创建型模式和类创建型模式;对象创建型模式处理对象的创建,类创建型模式处理类的创建;通俗地说,对象创建模式把对象创建的一部分推迟到另一个对象中,而类创建模式将它对象的创建推迟到子类中。(详见百度百科)
创建型模式有哪些?
分为工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
举例:
1.厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
工厂方法模式是最典型的模板方法模式应用。
角色结构
抽象工厂(Creator)角色:是工厂方法模式的贺信,与应用程序无关。任何在模式中创建对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用用以创建产品对象
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口,某具体产品有专门的具体工厂创建,它们之间往往一一对应。
优缺点
优点:克服了简单工厂违背开放-封闭原则的缺点,保持了封装对象创建过程的优点。集中封装了对象的创建。降低了客户与产品对象的耦合。
缺点:每加一个产品,就需要加一个产品工厂类,增加了额外的开发量。
在什么时候使用?
工厂方法经常用在两种情况中
第一种是对于某个产品,调用者清楚的知道应该使用那个具体工厂服务,实例化该具体工厂,生产出具体的产品来。
第二种情况,只是需要一种产品,而不想知道也不需要知道究竟是哪个工厂生产的,即最终选用哪个具体工厂的决定权在生产者以访,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程对于使用者来说是透明的。
2.抽象工厂模式
定义:提供一个创建一系列相关或相互依赖对象的接口,无需制定它们具体的类。
优点:一是易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。二是让具体创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中
结构型模式
结构型模式:在软件工厂中结构型模式是设计模式,借由一以贯之的方式来了解元件间的关系,以简化设计(详见百度百科)
分为适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
举例:
代理模式:
定义:为其他对象提供一种代理以控制对这个对象的访问。
组成:抽象角色:通过接口或抽象类声明真是角色实现的业务方法
代理角色:实现抽象角色,是真实角色的代理,通过真是角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
优点:职责清晰、代理对象起到了中介的作用和保护目标对象的作用、高扩展性。
行为型模式
在软件工程中,行为型模式为设计模式的一种类型,用来识别对象之间的常用交流模式并加以实现。(详见百度百科)
分为策略模式、装饰模式、观察者模式、迭代器模式、职责链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
举例:
访问者模式:
定义:访问者模式(Visitor),表示一个作用于某对象结构中的个元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
目的:把处理从数据结构分离出来
适用于数据结构相对稳定的系统。
优点:增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问者对象种。
缺点:增加新的数据结构变得困难
中介者模式:
定义:中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互。
优点:
- 简化了对象之间的关系,将系统各个对象之间的相互关系进行封装,将各个同事类解耦,使系统成为松耦合系统;
- 减少了子类的生成;
- 可以减少各同事类的设计与实现
缺点:由于中介者对象封装了系统种对象之间的相互关系,导致其变得非常复杂,使得系统维护比较困难。
使用场景:
- 系统种对象之间存在比较复杂的引用关系,导致他们之间的依赖关系结构混乱而且难以复用该对象。
- 想通过一个中间类来封装对各类中的行为,而又不想生成太多的子类。