公号:码农充电站pro
主页:https://codeshellme.github.iojava
若是有人问你,“什么样的代码是好代码”,你会怎样回答呢?git
我以为回答这个问题,应该从两个方面考虑。github
那从纯代码层面来讲,什么样的代码才是好代码呢?算法
一般会有如下几个判断标准:shell
好的代码,不必定要知足以上全部的条件。但一条也不知足的代码,基本上就不是好代码了。编程
无规则不成方圆,写代码也是如此。要写出好的代码,须要遵照一些规则,主要有如下几个方面:设计模式
每种设计模式都遵照了一个或多个设计原则。经常使用的设计原则有如下几种:安全
另外在面向对象编程中,也有两个比较重要的编程原则:架构
在编码的过程当中,要时常想着这些原则,思考本身的代码是否符合其中的某项或多项原则。并发
常见的设计模式有23 种,下面会详细介绍。
编码规范注重的是代码细节,主要目的是让代码具备可读性。总体上来讲,好的代码,对外应该有一个统一的代码风格,代码风格不必定有好坏之分,但必定有是否统一之别。
另外,代码命名也很重要,大到项目命名,目录命名,包名等。小到类名,接口名,方法名,对象名,变量名等。命名最基本的要求是用词标准达意,让人一看知道大概的用途是什么。
还有,必要的地方要有必要的注释,对于他人及本身回头看代码都有帮助。
随着项目需求的增长变化,代码结构,代码量也都会跟着变化。代码重构须要咱们不断的从总体架构的角度审视整个项目代码的结构,是否已经变得混乱无序。只有不断的对代码进行重构,才能使得代码持续的具备可维护性,可读性等标准。
通过上文,咱们已经知道了高质量代码的标准是什么。那么,当咱们编写完一部分代码后,应该怎样判断本身写的代码是不是高质量呢?
文章开头已经提到过,好的代码应该从业务和纯代码两个角度来衡量,下面咱们就从这两个角度来看,通常要对代码作哪些检查?
业务角度:
从纯代码角度考虑:
当咱们完成某一阶段的代码后,能够尝试从以上几点来检查代码是否过关。
下面主要介绍设计模式。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中常常遇到的一些设计问题,总结出来的一套通用的解决方案。
使用设计模式,可使得咱们编写的代码具备一个良好的结构,从而写出优雅的代码。设计模式关注的是,类与类之间以及对象与对象之间如何交互。
常见的设计模式有23 种,但并非每一种模式都经常使用。这23 种设计模式可分为3 大类,分别是:
下面介绍每类之中都包含哪些设计模式。
建立型包含5 种设计模式:
结构型包含7 种设计模式:
行为型包含11 种设计模式:
设计模式中常常会用到UML 图来表示类与类之间的关系,下面介绍6 种UML 规定的类关系,分别是:
各类关系之间的强弱性为:
泛化可理解为继承关系。以下代码中,类B继承了类A。
public class A { ... } public class B extends A { ... }
泛化关系用一个实线三角箭头表示,关系图以下,箭头由B 指向A,表示B继承了A:
实现类和接口之间的关系,称为实现关系。
以下代码中,类B 实现了接口A。
public interface A {...} public class B implements A { ... }
实现关系用一个虚线三角箭头表示,关系图以下,箭头由B 指向A,表示B 实现了A:
聚合是一种包含关系,A 类对象包含B 类对象,B类对象的生命周期能够不依赖A 类对象的生命周期。
以下代码中,A 类对象包含了B 类对象。
public class A { private B b; public A(B b) { this.b = b; } }
聚合关系用一个实线空心菱形箭头表示,关系图以下,箭头由B 指向A,表示A 中聚合了B:
组合是一种包含关系。A 类对象包含B 类对象,B 类对象的生命周期依赖A 类对象的生命周期,B 类对象不可单独存在。
以下代码中,A 类对象包含了B 类对象。
public class A { private B b; public A() { this.b = new B(); } }
组合关系用一个实线实心菱形箭头表示,关系图以下,箭头由B 指向A,表示A 中组合了B:
关联是一种很是弱的关系,包含聚合、组合两种关系。若是B 类对象是A 类的成员变量,那么B 类和A 类就是关联关系。
以下两种代码都是关联关系。
public class A { private B b; public A(B b) { this.b = b; } } // 或者 public class A { private B b; public A() { this.b = new B(); } }
关联关系用一个实线箭头表示,关系图以下,箭头由A 指向B,表示A 关联B:
依赖是一种比关联关系更弱的关系,包含关联关系。只要B 类对象和A 类对象有任何使用关系。
以下三种代码都是依赖关系。
public class A { private B b; public A(B b) { this.b = b; } } // 或者 public class A { private B b; public A() { this.b = new B(); } } // 或者 public class A { public void func(B b) { ... } }
依赖关系用一个虚线箭头表示,关系图以下,箭头由A 指向B,表示A 依赖B:
本篇文章主要介绍了什么是高质量代码,如何发现代码中的问题,以及如何编写高质量代码。另外重点介绍了23 种设计模式都有哪些,及每种设计模式的含义。最后介绍了设计模式中常常用到的UML 关系都有哪些。
但愿本篇文章对你有所帮助,若是哪里有任何问题也欢迎指正,谢谢!
(完。)
欢迎关注做者公众号,获取更多技术干货。