设计模式

236 阅读4分钟

代码的质量有哪些描述

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(highperformance)、安全性(security)、兼容性(compatibility)、易用性(usability)、整洁(clean)、清晰(clarity)、简单(simple)、直接(straightforward)、少即是多(less code is more)、文档详尽(welldocumented)、分层清晰(well-layered)、正确性(correctness、bug free)、健壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)

可维护性

所谓“代码易维护”就是指,在不破坏原有代码设计、不引入新的 bug 的情况下,能够快速地修改或者添加代码。所谓“代码不易维护”就是指,修改或者添加代码需要冒着极大的引入新 bug 的风险,并且需要花费很长的时间才能完成。

如果 bug 容易修复,修改、添加功能能够轻松完成,那我们就可以主观地认为代码对我们来说易维护。相反,如果修改一个 bug,修改、添加一个功能,需要花费很长的时间,那我们就可以主观地认为代码对我们来说不易维护。

可读性

们需要看代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。你应该也能感觉到,从正面上,我们很难给出一个覆盖所有评价指标的列表。这也是我们无法量化可读性的原因。

通俗的讲,拉几个人过来看你的代码,很少疑问就是可读性好,很多疑问就是可读性不好

可扩展性

代码的可扩展性表示,我们在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。说直白点就是,代码预留了一些功能扩展点,你可以把新功能代码,直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码。

灵活性

  • 当我们添加一个新的功能代码的时候,原有的代码已经预留好了扩展点,我们不需要修改原有的代码,只要在扩展点上添加新的代码即可。这个时候,我们除了可以说代码易扩展,还可以说代码写得好灵活。

  • 当我们要实现一个功能的时候,发现原有代码中,已经抽象出了很多底层可以复用的模 块、类等代码,我们可以拿来直接使用。这个时候,我们除了可以说代码易复用之外,

  • 还可以说代码写得好灵活。当我们使用某组接口的时候,如果这组接口可以应对各种使用场景,满足各种不同的需求,我们除了可以说接口易用之外,还可以说这个接口设计得好灵活或者代码写得好灵活。

设计模式有哪些

1.创建型

常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。

不常用的有:原型模式。

2.结构型

常用的有:代理模式、桥接模式、装饰者模式、适配器模式。

不常用的有:门面模式、组合模式、享元模式。

3.行为型

常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。

不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。

理论一:当谈论面向对象的时候,我们到底在谈论什么?

类和对象是其中重要的概念

理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?

封装

通过访问权限修饰符比如private,public等进行权限控制,

抽象

使用 interface 关键字和abstract 关键字实现抽象这一特性,其实这一特性基本上就是必须的,所以有时我们称为面向对象的3大特性就是把抽象排除在外

继承

代码复用,比如2个类有相似的代码块,那么可以让这两个类继承自同一个父类,这就是继承的好处。

不过继承太多层会出现许许多多的父类,导致代码关系十分臃肿

因此推荐多用组合少用继承

多态

多态特性能提高代码的可扩展性和复用性

利用多态去掉冗长的 if-else 语句,策略模式等等都运用到了多态