美文网首页
浅谈 Java 设计模式

浅谈 Java 设计模式

作者: 温驭臣 | 来源:发表于2019-01-09 11:17 被阅读0次

        对于写好代码,以前一直觉得,一个程序员如果写了超过10万行的代码,多读一些源码,自然就能写好代码。而且作为移动端的开发需要学的东西太多,像 Linux 操作系统,音视频,相机,图片,特效,OpenGL,3D 建模,NDK/JNI 等知识虽然作为移动端开发不需要特别精通,但是也得都会才行,至少得能配合这些专业的开发团队进行技术沟通,对各种手机进行调试,因为这些都是手机开发的一部分,他们的优先级都要高于设计模式这一块。但是最近一段时间和团队的配合发现,理解和掌握典型的设计模式,有利于团队提高沟通,设计的效率和质量,所以为了能够更直观的使用设计模式,今天简单归纳总结一下设计模式。要学会设计模式就得先明白面向对象的设计基础,封装,继承,多态,接口和抽象类。

第一,面向对象设计

        封装的目的是隐藏事物内部的实现细节,以便提高安全性和简化编程。我们在日常开发中,有很多因为无意间暴露了细节导致的难缠 bug,比如在多线程环境暴露内部状态,导致的并发修改问题。这时候使用封装不仅可以提供合理的边界,避免外部调用者接触到内部细节,而且还能简化调用界面,避免太多无意义的细节。

        继承是代码复用的基础机制,也可以看作是非常紧耦合的一种关系,父类代码修改,子类行动也会变动。在实践中,如果过度使用继承,也可能会起到反效果。

        多态,我们马上想到的就是重写,重载,向上转型,重写是父子类中相同名字,参数的方法,不同的实现;重载是相同名字,不同参数,本质上是方法签名的不同。

        接口是对行为的抽象,它是抽象方法的集合,利用 API 定义和实现分离的目的。接口中要么是抽象方法,要么是静态方法。

        抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目的主要是代码的重用。抽象类大多用于抽取相关 Java 类的共用方法或者共同成员变量,然后通过继承的方式达到代码复用的目的。

        Java 相比于其他面向对象语言,如 C++,设计上有一些区别,比如 Java 不支持多继承。这种限制,在规范了代码实现的同时,也产生了一些局限性,影响着程序设计结构。Java 类可以实现多个接口,因为接口是抽象方法的集合,所以这是声明性的,但不能通过多个抽象类来重用逻辑。在一些情况下存在特定场景,需要抽象出与具体实现,实例化无关的通用逻辑,或者纯调用关系的逻辑,但是使用传统的抽象类会陷入到单继承的窘境。常见的做法是,实现由静态方法组成的工具类。接口的职责也不仅仅限于抽象方法的集合,其实有各种不同的实践。比如我们熟知的 Serializable 接口就是为了声明某些东西。

第二,面向对象编程设计原则

        既然是设计,那一定有原则可以遵循,我们先把代码设计最基本的五个原则搞明白。

        1,单一职责,类或者对象最好是只有单一职责,在程序设计中如果发现某个类承担着多种义务,可以考虑进行拆分。

        2,开关原则,设计要对扩展开放,对修改关闭。程序设计应保证平滑的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以减少回归问题。

        3,里式替换,就是进行继承关系抽象时,凡是可以用父类或者基类的地方,都可以用子类替换。

        4,接口分离,我们在进行类和接口设计时,如果在一个接口里定义了太多方法,其子类都可能面临两难,就是只有部分方法对它是有意义的,这就破坏了程序的内聚性。对于这种情况,可以通过拆分成功能单一的多个接口,将行为进行解耦。在未来的维护中,如果某个接口设计又变,不会对使用其他接口的子类构成影响。

        5,依赖反转,实体应该依赖抽象而不是实现。也就是说高层次模块,不应该依赖低层次模块,而是应该基于抽象。实践这一原则是保证产品代码之间适合耦合度的法宝。

        举例:开关原则,看下图:

上面的示例,将不同对象分类的服务方法进行抽象,把业务逻辑的紧耦合关系拆开,实现代码的隔离保证了方便的扩展。当然也要避免过度设计,这个只是举例。

第二,设计模式

        有了面向对象设计基础,我们再来看设计模式。设计模式是人们为软件开发中相同表征的问题,抽象出的可重复利用的解决方案。在某种程度上,设计模式已经代表了一些特定情况的最佳实践,同时也起到了软件工程师之间沟通的行话的作用。学习一个新知识,我的习惯是先抽象分类,我们先把现在常见的设计模式按应用目标进行一下分类,大致可以分为创建性模式,结构性模式和行为型模式。

        创建型模式,是对对象创建过程中的各种问题和解决方案的总结。包括有工厂模式,单例模式,构建器模式,原型模式。

        结构性模式,是针对软件设计结构的总结,关注于类,对象继承,组合方式的实践经验。包括有桥接模式,适配器模式,装饰者模式,代理模式,组合模式,外观模式,享元模式。

        行为型模式,是从类或对象之间交互,职责划分等角度总结的模式。包括有策略模式,解释器模式,命令模式,观察者模式,迭代器模式,模板方法模式,访问者模式等。

        上面说了那么多模式,都是前辈们总结的,我们给这些模式抽象分类主要就是方便使用,我们今天分析一个我们最常见的模式,单例模式。既然要学习单例模式,首先我们先看看权威是怎么实现的,比如在 Java 核心类库中的 java.lang.Runtime 中的单例模式实现,看下图:

这是最新版 java 的源码

        看 java 核心类库中的单例模式,它并没有使用复杂的双检锁实现,也没有使用枚举类型实现。需要注意的是它在最新的版本中静态实例被声明为 final 。所以我建议在 android 中使用单例模式要学习 Java 类库的写法。因为毕竟手机使用的是简单命令集架构,服务器使用的是复杂命令集架构,同样的配置服务器的速度是手机的十倍。手机开发还是要尽量的减少资源的消耗。

相关文章

  • 浅谈 Java 设计模式

    对于写好代码,以前一直觉得,一个程序员如果写了超过10万行的代码,多读一些源码,自然就能写好代码。而且作为移动端的...

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

  • Java 设计模式《概述》设计模式,如此简单~

    博客专栏 Java设计模式系列内容,就现在,让设计模式如此简单。 Java设计模式系列文章 Java 设计模式(一...

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 浅谈java设计模式之模板模式

    通过不断地深入的学习JAVA开发语言,才意识到熟悉掌握JAVA开发设计思想尤其重要。今天就先浅谈一下模板模式。 ...

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • 浅谈工厂设计模式 - java

    工厂模式分为简单工厂模式、抽象工厂模式、工厂方法模式,其中前两个是我们经常会用到的,那我们就来探讨一下前两种设计模...

  • 浅谈装饰设计模式 - java

    装饰设计模式是在不改变原类和使用继承的情况下,动态地扩展一个对象的功能,它是通过创建一个包装对象,也就是通过装饰来...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 浅析Java设计模式【1】——观察者

    前情内容 浅析Java设计模式【1】——观察者 浅析Java设计模式【2】——适配器 浅析Java设计模式【3】—...

网友评论

      本文标题:浅谈 Java 设计模式

      本文链接:https://www.haomeiwen.com/subject/dhsurqtx.html