23种设计模式和6大原则简述

大纲

  • 创建型模式
    • 简单工厂模式
    • 工厂方法模式
    • 抽象工厂模式
    • 建造者模式
    • 单例模式
    • 原型模式
  • 结构型模式
    • 适配器模式
    • 桥接模式
    • 装饰模式
    • 外观模式
    • 享元模式
    • 代理模式
    • 组合模式
  • 行为型模式
    • 命令模式
    • 中介者模式
    • 观察者模式
    • 状态模式
    • 策略模式
    • 职责链模式
    • 迭代器模式
    • 访问者模式
    • 解释器模式
    • 模板方法模式
  • 6大法则
    • 单一职责原则
    • 开闭原则
    • 依赖倒转原则
    • 迪米特法则
    • 里式替换法则
    • 接口隔离法则

内容有点小长!可以跳着看哈!

简单工厂模式

简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

例子:麦当劳、肯德基和汉堡王都有汉堡包,尽管有不同的样式、口味,但是需要购买的时候,只管向服务员说 来份汉堡 就可以了(只能是默认的汉堡,不能不同口味)!

麦当劳、肯德基和汉堡王都是生产汉堡包的Factory工厂。

  • 优点

客户端可以免除直接创建产品对象的责任,而仅仅消费产品;客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

  • 缺点
  1. 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  2. 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
  3. 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  4. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

工厂方法模式

工厂方法模式(也叫虚构工厂)中,工厂父类负责 定义创建产品对象的公共接口 ,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。

例子:同样是汉堡包,有不同的样式、口味,需要购买的时候,不同需求的人只管向服务员直接说就可以了,每个人都可以提自己的口味!

  • 优点
  1. 用户只需要关心所需产品对应的工厂,无须关心创建细节,甚至无须知道具体产品类的类名。
  2. 入新产品时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体工厂具体产品就可以了。
  • 缺点
  1. 在添加新产品时,需要编写新的具体产品类,而且还要提供与之对应的具体工厂类
  2. 增加了系统的抽象性和理解难度。