设计模式之常用场景

1.设计模式的定义

   

     模式是一条由三个部分组成的通用规则:它表示了一个特定环境一类问题一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计

 

2.设计模式分类

 

    1.创建型

      创建对象时,不再由我们直接实例化为对象,而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能,更好的架构优势,创建型模式主要有简单工厂模式(不是23种设计模式之一),工厂方法,抽象工厂模式,单例模式,生成器模式和原型模式。主要用于创建对象。创建模式:为复杂的初始化流程提供一个清晰简单的视角;让系统中对象的创建、组合和表达方式与系统本身独立开来。

    2.结构型

      用于帮助将多个对象组织成更强大的结构,结构模式主要有适配器模式,桥接模式,组合器模式,装饰器模式,门面模式,亨元模式,代理模式。简单说就是用户处理类或对象的组合解耦多个类;引入一个抽象类用于将来的扩展;封装复杂的结构。

    3.行为型

      用户帮助系统间各对象通信,以及如何控制复杂系统中的流程,行为型模式主要有命令模式,解释器模式,迭代器模式,中介者模式,备忘录模式,观察者模式,状态模式,策略模式,模板模式,访问者模式。用于描述对类或对象怎样交互怎样分配职责。行为模式:允许算法和对象职责分配之间的选择(“谁做什么”);简化在运行时难以追踪的复杂的控制流。

 

 

3.设计原则(理论)

    

    1.单一职责原则,一个类只有一个引起他变化的原因,应该只有一个职责。

    2.开闭原则,对扩展开放,对修改关闭。

    3.里氏替换原则

       里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

    4.依赖倒转原则

       所谓依赖倒置原则(Dependence Inversion Principle)就是要依赖于抽象,不要依赖于具体。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。实现开闭原则的关键是抽象化,并且从抽象化导出具体化实现,如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要手段。

    5. 接口隔离原则

       就是软件工程中的低耦合概念。

    6. 合成复用原则

    7. 迪米特原则

 

3.常见设计模式总结。

 

    其实我们在开发过程中都或多或少用过设计模式中的某些模式,只是可能因为对设计模式了解过少,自己都不知道,下面为大家总结一下日常项目中大家一般会用到的设计模式及场景。

 

    1.单例模式(应用非常广泛)

     这不用多说,一般对数据库的连接封装的类方法,都是单例,某些时候,允许自由创建对象反而会影响系统性能下降,只用实例化一次对象,很大程度节约了系统开销。

    2.模板模式,说直接点,就是将能够抽象出来的尽量抽象为模板,尽量复用。

    3.代理模式, 代理模式其实就是在访问对象的时候引入一定程度的间接性,可以在这种间接性期间附加其他多种用途,比如

       比如应用于虚拟对象,根据需要创建开销很大对象的时候,通过它来存放实例化需要很长时间的真实对象,比如打开有很大img的网页时,先看到文字,那些图片一张一张下载后看到,未打开的图片框就是通过虚拟代理来替代了真实的图片,代理存储了真实图片的路径和尺寸。

    4.迭代器模式(属于应用非常广泛的一种模式,一般都被语言自己支持)

            1.访问一个聚合对象的内容而无需暴露它的内部表示

         2.支持对聚合对象的多种遍历

         3.为遍历不同的聚合结构提供一个统一的接口

   5.观察者模式

 主要适用于发布订阅,解除耦合,包括注册,通知,更新模式,这种思想有用于队列等服务,比如业务场景可以用在某人开通会员,其他所有业务方可以作为观察者订阅这一行为,实现完成自己的业务逻辑。

主要包括容器类,观察者抽象类,观察者子类

注册观察者子类到容器类的list, 容器类进行控制变更,实现通知所有观察者子类生效。

   6.策略模式

 构造策略类的时候,我们传入一个对象,然后策略类调用这个对象的方法取得返回,这样就让策略类拥有了根据对象来动态的决定方法的能力。

优点:

避免使用多重条件判断,扩展性良好,简化了单元测试,具体策略可以自由切换

   7.门面模式

   8.工厂模式(应用非常广泛)

 

   9.适配器模式

   10.模板模式

    在父抽象类控制,在子类实现

    参考:http://www.runoob.com/design-pattern/template-pattern.html

 

 

 

 

 

 

 

 

部分描述引用百科

http://www.kuqin.com/shuoit/20151221/349541.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值