热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

0.学会设计模式

设计模式是开发过程中不可回避的一个重要应用,通过它我们能写出更加优秀、实用、高效的代码。设计模式在面向对象语言之间通用,它具有以下优点:可维护(可读性)

设计模式是开发过程中不可回避的一个重要应用,通过它我们能写出更加优秀、实用、高效的代码。设计模式在面向对象语言之间通用,它具有以下优点:

  • 可维护(可读性)
  • 可复用
  • 可扩展
  • 灵活性好

设计模式的六大原则:SOLID原则

1. 单一职责原则 (Single Responsibility Principle,SRP)

就一个类而言,应该仅有一个引起它变化的原因

实际使用中,我们是尽量满足这个原则,这个原则涉及到一个颗粒度的把握。对于类来说很难进行设计,因为受到很多因素的制约,类需要承担多种职责通常我们针对接口进行单一职责设计,用类实现多个接口,完成多个职责融合

如:Android中的Activity,它就通过实现接口来丰富自己的职责

 public class Activity extends ContextThemeWrapper
      implements LayoutInflater.Factory2,
      Window.Callback, KeyEvent.Callback,
         OnCreateContextMenuListener, ComponentCallbacks2,
         Window.OnWindowDismissedCallback, WindowControllerCallback,
         AutofillManager.AutofillClient {
             ...
             ...
 }

2. 开闭原则(Open Closed Principle,OCP)

对扩展开放,对修改关闭

这是六大原则中最重要、基础的原则。其他5个原则如果说是指导设计的工具和方法,开闭原则则是指导思想,它没有具体的做法,需要体会使用

如:Android中接入打印功能时只有打印文字功能,一旦业务扩展需要支持打印图片功能,这时符合开闭原则的做法是:不对已有的打印功能接口及实现类进行修改(对修改关闭),实现新的打印功能接口实现类,在类中支持打印图片(对扩展开放)。

3. 里氏替换原则(Liskov Substitution Principle,LSP)

子类型必须能够替换掉他们的父类型

这在我们的开发过程中十分有帮助,我们不需要关系功能的实现,只在乎有满足功能的类来工作

如:Android开发中经常有使用到上下文Context的地方,我们只需要在传入的地方定义Context,在使用时传入Application、activity都可以

4. 迪米特法则 (Law of Demeter,LoD)

最少知识原则:一个对象应该对其他对象有最少的了解
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法时,可以通过第三者转发这个调用

目的使得类与类直接关系简洁明了,每个类暴露的对外操作越少,那么对应的耦合就越弱,对应的复用率就越高。

如:Android中工具类的使用,查询数据时不需要直接操作数据库类;访问网络时不需要直接调用网络请求类进行连接。这在后续的修改和调整时都能方便的进行更新

5. 接口隔离原则 (Interface Segregation Principle,ISP)

客户端不应该依赖它不需要的接口、类间的依赖关系应该建立在最小的接口上
保持接口的纯洁性:小(尽量单一职责)、高内聚(减少对外暴露的方法,降低修改成本及风险)

目的就是建立单一接口,接口尽量细化,接口中方法尽量少(与单一原则的区别是:单一职责强调的是职责单一,职责可能包含多个方法)

如:Android中点击回调接口设计,单击、长按、双击都有各自的接口(而不是写在同一个接口中,完成“点击”这一职责)

6. 依赖倒转原则 (Dependence Inversion Principle,DIP)

高层模块不应该依赖低层模块。两个都应该依赖抽象
抽象不应该依赖细节,细节应该依赖抽象

更加简洁的定义就是“面向接口编程”

如:Android开发中常使用的三方SDK调用、方法回调等,不关心功能的实现,只要求满足输入输出的类型。如MVP开发模式中,我们定义P层抽象应具有的功能,V层不需要关系P层的具体实现

设计原则的初衷是服务应用使之质量更高,但应用最终目的是交付使用的,所以对于使用这些原则要做到尽量而不是死抠,要灵活使用而不盲目过度设计

设计模式的三大类型及23种设计模式

  • 设计模式结构

    0. 学会设计模式
    0-设计模式
  • 23种设计模式

推荐阅读
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 今日份分享:Flutter自定义之旋转木马
    今日份分享:Flutter自定义之旋转木马-先上图,带你回到童年时光:效果分析子布局按照圆形顺序放置且平分角度子布局旋转、支持手势滑动旋转、快速滑动抬手继续旋转、自动旋转支持X轴旋 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
author-avatar
潇洒D-An_na
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有