设计模式之语言选择

设计模式简介

背景

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

设计原则

设计模式的目的是代码复用,增加可维护性.面向对象编程中为达到代码复用的目的需要遵循以下原则:1. 单一职责原则 (Single Responsiblity Principle SRP)
2. 开闭原则(Open Closed Principle,OCP)
3. 里氏代换原则(Liskov Substitution Principle,LSP)
4. 依赖倒转原则(Dependency Inversion Principle,DIP)
5. 接口隔离原则(Interface Segregation Principle,ISP)
6. 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)、
7. 最小知识原则(Principle of Least Knowledge,PLK,也叫迪米特法则)注: 开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他几条,则可以看做是开闭原则的实现方法。

单一职责原则

又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。马丁表示此原则是基于汤姆·狄马克(Tom DeMarco)和Meilir Page-Jones的著作中的内聚性原则发展出的。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

开闭原则

原文是:“Software entities should be open for extension,but closed for modification”。就是说模块应对扩展开放,而对修改关闭。模块应尽量在不修改原(是“原”,指原来的代码)代码的情况下进行扩展。

里氏替换原则

里氏代换原则是由Barbara Liskov提出的。如果调用的是父类的话,那么换成子类也完全可以运行。

依赖倒转原则

指在软件里面,把父类都替换成它的子类,程序的行为没有变化。简单的说,子类型能够替换掉它们的父类型。依赖性倒转其实可以说是面向对象设计的标志,用哪种语言编程并不是很重要。

接口隔离原则

每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。

合成聚合复用原则

合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)经常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
就是说要少用继承,多用合成关系来实现。

最小知识原则

也叫迪米特法则。不要和陌生人说话,即一个对象应对其他对象有尽可能少的了解。

设计模式分类

设计模式分为三种类型,共23种。创建型模式:单例模式抽象工厂模式建造者模式工厂模式原型模式结构型模式:适配器模式桥接模式装饰模式组合模式外观模式享元模式代理模式行为型模式:模版方法模式命令模式迭代器模式观察者模式中介者模式备忘录模式解释器模式(Interpreter模式)状态模式策略模式职责链模式(责任链模式)访问者模式。其他模式:管道模式(pipeline)MMVM 模式MVC 模式

GO 语言简介

简介

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易

发展历史编辑

Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现。谷歌资深软件工程师罗布·派克(Rob Pike)表示,“Go让我体验到了从未有过的开发效率。”派克表示,和今天的C++或C一样,Go是一种系统语言。他解释道,“使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大。”2007年,谷歌把Go作为一个20%项目开始研发,即让员工抽出本职工作之外时间的20%,投入在该项目上。除了派克外,该项目的成员还有其它一些谷歌工程师。派克表示,编译后Go代码的运行速度与C语言非常接近,而且编译速度非常快,就像在使用一个交互式语言。现有编程语言均未专门对多核处理器进行优化。派克表示,Go就是谷歌工程师为这类程序编写的一种语言。它不是针对编程初学者设计的,但学习使用它也不是非常困难。Go支持面向对象,而且具有真正的闭包(closures)和反射(reflection)等功能。在学习曲线方面,派克认为Go与Java类似,对于Java开发者来说,应该能够轻松学会Go。之所以将Go作为一个开源项目发布,目的是让开源社区有机会创建更好的工具来使用该语言,例如Eclipse IDE中的插件。目前还没有支持Go的IDE。在目前谷歌公开发布的所有网络应用中,均没有使用Go。但是谷歌已经使用该语言开发了几个内部项目。派克表示,Go是否会对谷歌即将推出的Chrome OS产生影响,现在还言之尚早,不过Go的确可以和Native Client配合使用。他表示,“Go可以让应用完美的运行在浏览器内。”例如,使用Go可以更高效的实现Wave,无论是在前端还是后台。

特点

Go语言是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:1.它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。2.Go语言为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。3.Go语言是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。4.Go语言完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。Go语言是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

特色

简洁,快速,安全,并行,有趣,开源,支持泛型编程,内存管理,数组安全,编译迅速

目标

Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。

第一个 Go 程序

接下来我们来编写第一个 Go 程序 hello.go(Go 语言源文件的扩展是 .go),代码如下:
    package mainimport "fmt"func main() {fmt.Println("Hello, World!")}
执行以上代码输出:
$ go run hello.go
Hello, World!

转载于:https://my.oschina.net/zhgk/blog/1934908

00_设计模式之语言选择相关推荐

  1. 直播系统开发的语言选择

    你知道直播系统开发后端使用的是什么语言吗? 它是 Java 还是 PHP呢? 两者有什么区别? 一.基本介绍 Java 是一种计算机编程语言.和Python等编程语言一样,大家平时接触到的安卓手机,里 ...

  2. php和python哪个好-PHP和Python语言选择哪个好

    原标题:PHP和Python语言选择哪个好 尽管 RESTful API 和跨平台库已经使网页开发容易起来,但依然没有解决阻碍并隔分开发者.管理者和消费者的由来已久的问题:PHP vs Python, ...

  3. C语言选择排序(解析)

    C语言选择排序(解析) 运行结果:

  4. c语言文件归并问题_C语言 | 选择法对10个数排序

    例60:C语言实现用选择法对10个整数排序. 解析:选择排序思路如下,设有10个元素a[1]~a[10],将a[1]与a[2]~a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 ...

  5. c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt

    <C语言选择结构程序设计.ppt>由会员分享,可在线阅读,更多相关<C语言选择结构程序设计.ppt(32页珍藏版)>请在人人文库网上搜索. 1.选择结构程序设计,关系运算符和关 ...

  6. C语言——选择法排序_数组

    C语言--选择法排序_数组 问题描述 对于任意给定的含有十个数字的一维数组,如何进行排序? 编程思想: 让a[0]最小,分别与a[1].a[2]-a[9]比较: 让a[1]最小,分别与a[2]-a[9 ...

  7. c语言 结构作用是什么,C语言选择结构知识点

    C语言选择结构知识点 C语言是一个有结构化程序设计.具有变量作用域(variable scope)以及递归功能的过程式语言.以下是小编为大家搜索整理的C语言选择结构知识点, 希望能给大家带来帮助!更多 ...

  8. c语言 教学目标,c语言选择结构程序设计教学目标

    c语言选择结构程序设计教学目标 <选择结构程序设计>教学目标 能力要求: a) 能够使用 if 语句编写条件选择程序 b) 能够使用嵌套 if 语句和 switch 语句编写多分支选择结构 ...

  9. c语言选择结构作用,c语言选择结构程序设计教案

    <c语言选择结构程序设计教案>由会员分享,可在线阅读,更多相关<c语言选择结构程序设计教案(16页珍藏版)>请在人人文库网上搜索. 1.选择结构程序设计(一)说明内容1关系运算 ...

最新文章

  1. Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法
  2. batch size 训练时间_深度学习 | Batch Size大小对训练过程的影响
  3. linux增量编译不成功,Linux学习笔记-增量编译(Makefile进一步使用)
  4. jzoj1370-飞船【RMQ初见】
  5. java标签用法详解_介绍一个javaWeb自定义标签的用法详解
  6. winform checkbox要点击两次_这个Winform的UI库也太全了!四十多个控件都在这一个项目里了...
  7. 听说你还不懂哈夫曼树和哈夫曼编码
  8. AngularJS 动态模板
  9. navtab触底 小程序_微信小程序TAB切换效果
  10. 《高翔视觉slam十四讲》学习笔记 第四讲 李群与李代数
  11. CentOS导入CA证书
  12. libtorch显存管理示例
  13. HTTP gzip压缩
  14. ubuntu激活pycharm
  15. github的博客搭建以及标签的自动化
  16. 安卓Bmob后端云的使用(增删改查、上传图片、推送服务等)
  17. tomcat环境变量的设置:
  18. 三元运算符案例(两只老虎、三个和尚)问题、分析、代码
  19. 什么是城府?你做到了你就无敌了!
  20. python 打开文件夹_python打开目录

热门文章

  1. 038 浅谈PHP动态生成静态页面
  2. 如何使用中国气象局API开发天气APP
  3. 制作gif动态图片,LICEcap – 灵活好用,GIF 屏幕录制工具
  4. 传智健康项目中相关知识点介绍(如图片存储,发送短信,定时调度,统计报表...)
  5. 手机扫盲集锦(常用术语、小常识、如何鉴别水货手机和行货手机等)
  6. 医院信息化成功的关键=本质+方法+工具
  7. React Routing
  8. 华为云的下一程:与中国SaaS软件开发企业一起“乘风破浪”
  9. usb hub芯片 android,usb hub芯片GL850G详解
  10. 每个 Apache Kafka 开发者都应该知道的5件事