目录

前言

首先,六大原则是谁?

其次,为什么需要学习这六大原则?

正文

一、单一职责原则

示例:

因此我们需要进行拆分,根据具体的职能可将其具体拆分如下:

Unity 单一职责原则

二、开闭原则

Unity 开闭原则


前言

面向对象,六大原则,设计模式,数据结构与算法,这些知识点都是脱离编程语言存在的。也就意味着它们 “比较抽象”,抽象的东西也就意味着从学习、理解到运用所需要花费的时间会比较长。

今天我们就主要谈谈设计模式的“六大原则”。


首先,六大原则是谁?

它们分别是单一职责、开闭原则原则、依赖倒置原则、里氏替换原则、接口隔离原则、迪米特原则。


其次,为什么需要学习这六大原则?

六大原则是我们提高面向对象编程代码质量的必备原则,另外还是我们理解设计模式的必备前提。

弄清楚了学习对象和学习目的,下面就可以进入正题了,这六大设计原则本质上是什么,又分别是用来做什么的,实际中的运用又有哪些?


正文

一、单一职责原则

定义:就一个类而言,应该仅有一个引起它变化的原因。简单点理解就是,就是一个类只负责一项职责(功能)。

从生活中的具体示例理解单一职责:

冰淇淋:单一职责是被吃

矿泉水:单一职责是被饮用

ofo:单一职责是共享单车

生活中的事物的单一性是为了集中(精力 / 财力 / 物力),然后把这一点做到最好,只有这样才能更有竞争力。


而编程中的单一性也是为了集中,一个类它的功能,作用,用途集中到一点。这样可以避免代码冗余,方便管理,方便团队沟通,能提高项目的开发效率。

示例:

public interface UserService {public void login(String username, String password);public void register(String email, String username, String password);public void logError(String msg);public void sendEmail(String email);}

这段代码很显然存在很大的问题,UserService 既要负责用户的注册和登录,还要负责日志的记录和邮件的发送,并且后者的行为明显区别于前者。

假设我要修改发送邮件的逻辑就得修改这个类,这时候 qa 还得回归登录注册逻辑,这样明显不合理。

因此我们需要进行拆分,根据具体的职能可将其具体拆分如下:

UserService:只负责登录注册

public interface UserService {public void login(String username, String password);public void register(String email, String username, String password);}

LogService :只负责日志

public interface LogService {public void logError(String msg);}

EmailService: 只负责发送邮件

public interface EmailService {public void sendEmail(String email);}

Unity 单一职责原则

结合 Unity 项目开发过程中,有两个注意点:

①类功能的单一性;

②方法功能的单一性;

一个类只负责一件具体的事情,一个方法只完成一个特定的功能。当你发现一方法完成了两件事情的时候,就需要适当的重构成两个方法,类也是一样的。单一职责在 unity 项目开发中的应用:

①功能类库的单一性:例如 UGUI 中的 JSON 就是单一用于解析 JSON 的。

②引擎组件类功能单一性:在 Unity 引擎内有一组灯光组件,是用于实现灯光照射渲染功能的。它根不同的功能分割成了 4 个组件:方向光,点光源,聚光灯,区域光。


二、开闭原则

定义:全称开放封闭原则,软件实体(类,方法,模块)应该可以扩展,但是不可以修改

在生活中的具体应用:

笔记本电脑

封闭:整个笔记本是封闭的,且笔记本背部标明了 “非专业人士,请勿试图拆卸或者维修” 以及 “撕毁保修无效” 的封条。

开放:指的是笔记本提供了若干个 USB 的插口,可供我们扩展。


笔记本上的封闭,是为了保证设备本身的安全。而笔记本上的开放,是为用户预留可以扩展的接口。

而编程中的封闭,也是为了保证原有的安全,当出现了新的需求,是以扩展的方式,而不是对原有的逻辑进行修改。面对需求,对程序的改动应该是以增加新代码的方式解决,而不是更改旧的代码 (这一点在游戏开发方向尤为重要)。


Unity 开闭原则

Unity 引擎本身就是开闭原则很好的一个案例。

Unity 官方把这款引擎打包发布出来以后,这个引擎本身程序员是不可以修改的,因为你没有源码 ---> 对修改关闭。但是 Unity 引擎提供了 “编辑器扩展功能”,提供了一组完整的 API,我们可以通过这组 API 对 Unity 引擎扩展出 N 个插件,以满足我们的特定需求。

unity 项目开发——浅谈设计模式的六大原则(一)相关推荐

  1. 神了!有人用一个项目把23种设计模式与六大原则融会贯通了

    前言 设计模式分为三类,创建型,结构型和行为型.创建型比较好理解,它抽象了实例化过程,将系统与实例的创建解耦.实例由专门的工厂来创建,从而使系统针对实例的抽象接口编程,不依赖任何具体的实现.结构型和行 ...

  2. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)...

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  3. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  4. Hubble A/B test平台前端项目开发浅谈

    前言 现在Hubble abtest平台已经正式上线了,至于技术实现方案我在其中一篇文章做了一些分享(查看react技术栈实践),本文主要分享下一些开发过程中的遇到问题思考总结,以及简单介绍下我们平台 ...

  5. 校园兼职网站php设计,基于PHP+MySql的校园兼职信息平台的开发浅谈

    Data Base Technique 0数据库技术基于PHP+MySqI的校园兼职信息平台的开发浅谈文刘晓智1杨雨锋2李万星2 表1:数据库一蹬表 摘要 首光简要介绍了编程语孬和MySql数据库的主 ...

  6. 如何理解设计模式的六大原则?

    我们知道,java中有类,父类,抽象类,接口这些概念,而设计模式的六大原则就解释了它们及其它们之间的关系是怎样的,接下来我们将由简到难一一剖析. 开闭原则:是总纲,他告诉我们要对扩展开放,对修改关闭. ...

  7. (转)设计模式之六大原则

    源地址:http://blog.csdn.net/scboyhj__/article/details/47844639 1. 单一职责原则 -Single Responsibility Princip ...

  8. 设计模式的六大原则(SOLID)

    设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Pr ...

  9. 「设计模式」六大原则之三:里氏替换原则小结

    文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...

最新文章

  1. CentOS7下安装nvm
  2. hdu oj 2020 绝对值排序
  3. 算法学习的链接(持续更新)
  4. POJ 1860 Currency Exchange
  5. etcd分布式之消息发布与订阅
  6. 几种排序算法性能的比较
  7. java中的类型转换
  8. flume案例-flume级联-组件分析
  9. windows 系统nginx做反向代理实例
  10. JUnit和Mockito合作
  11. tnsnames.ora 的编写
  12. fedora下安装python
  13. ppt恢复保存前的文件_文档忘记保存怎么恢复?断电导致文件丢失如何恢复?
  14. CF Round #580(div2)题解报告
  15. 数码视讯Q1、Q5机顶盒线刷固件
  16. tumblr_从iPhone或iPod Touch更新Tumblr博客
  17. Mysql复制原理以及流程
  18. 新计算机如何用光盘安装系统,win7如何用光盘装系统_使用光盘重装win7系统步骤...
  19. 删除外键的sql语句
  20. 并发编程——线程协作

热门文章

  1. 超厉害的黑科技APP强势来袭,千万不能错过!
  2. springboot整合xwpf将world转为pdf
  3. j计算机职称考试题库,2017职称计算机考试题库「附答案」
  4. VS2008 Win7下安装 运行时系统必备失败 error1603
  5. 【工具】LaTeX-OCR一款免费的公式识别软件
  6. undeclared identifier的几种可能
  7. HyperDock优化Mac的Dock栏
  8. 嵌入式和Python(一):python环境搭建的详细步骤
  9. scrapy爬虫下载文件、重命名文件
  10. 如何在苹果笔记本上装win7系统