什么是设计模式呢?这个问题曾经一直困扰着我,以前我一直以为这是门新的技术,但是随着工作年限和工作经验的增加,其实设计模式就是已经在众多软件系统得到验证的成功的并且可复用的技术方案或者解决问题的方案。Java是目前最主流的开发语言之一,在众多的实践中,总结出了多个设计模式,学习这个模式有助于程序员写出高质量的而又有效的代码。因此一种设计模式能够解决类似的问题,并加以复用。但是在实际的编程中可能在解决一个问题时组合使用多个设计模式,这就要我们要活学活用了。

对于Java的设计模式来说,目前流行的主要有23种,这些设计模式解决了Java程序开发中的大多数的设计问题。在这先说说代码编程中的一些原则,也就是设计模式的初衷吧。

1.面向抽象原则

  指当设计一个类 时,不让该类面向具体的类,而是面向抽象类或者接口类,即所设计类中的重要数据是抽象类或者接口声明的变量,而不是具体声明的变量。我的理解是Java里的多态,就是一个模块中各个功能点都会用到方法的高度抽象和提取,是普遍具有的行为动作。往往找这个抽象类比较难,需要不断思考,然后抽丝剥茧。

2.开 - 闭原则

  就是让设计对扩展开放,对修改关闭。怎么理解这句话呢?其实是指当一个设计中增加新的模块时,不需要修改现有的模块。在给出一个设计时,要充分考虑客户需求的变化,将客户变化的部分设计为对外扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分要对修改关闭。也就是说不能因为用户的需求变化了,核心的基本结构代码做修改。遵守开 - 闭原则的设计肯定是易于维护的,因为在设计中增加新的模块是,不用修改设计中的核心模块。

  这里不是说系统的每个部分都要遵守这个原则,而是在把主要精力集中在应对设计中最有可能因为需求变化而需要改变的地方,然后想办法应有这个原则加以解决。

  当设计一个系统时,经常需要面向对象来考虑系统的总体设计,不要考虑具体类,这样就容易设计出满足 开 - 闭 原则的系统,在程序设计好以后,首先对abstract类的修改关闭,否则,一旦修改abstract类,比如,增加一个abstract方法,那么所有的子类都要进行修改;应当增加abstract类的子类开发,即在程序中再增加子类时,不需要修改其他面向抽象类而设计的重要类。

3.多用组合少用继承原则

  (1)继承和复用

    子类继承父类的方法可以作为自己的方法,实现了代码的复用,并且可以重写父类的方法,用于扩展。

    但是子类和父类是强耦合的关系,也就是说父类修改时势必会影响子类,并且父类的内部结构,子类也是一清二楚。

  (2)组合与复用

    一个类可以把对象作为自己的成员变量,那么这个类就是其他类的组合了,那么其他对象就可以调用该对象的方法了。

    当前对象包含的对象中方法的具体实现对当前对象是不可见的;

    组合关系是弱耦合关系,修改当前对象所包含的对象中代码不用修改当前对象代码;

    当前对象可以在运行是动态指定所包含的具体对象,例如成员变量是个接口,运行时可以动态指定实现类;

    这个缺点就是可能会导致系统中的对象过多,为了组合多个对象必须得仔细对接口进行定义。

  (3)多用组合,少用继承

    这样做的目的就是为了写出低耦合的代码。

4.高内聚 - 低耦合原则

  如果类中的方法是一组相关的行为,则称该类是高内聚,反之称为低内聚。高内聚便于类的维护,低内聚不利于维护。

  低耦合就是尽量不要让一个类含有太多其他类的实例引用,避免修改系统其中一部分会影响其他部分。

Java的设计模式之开篇(1)的更多相关文章

  1. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  2. 基于java的设计模式入门(1)——为什么要学习设计模式

    大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...

  3. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  4. 单例模式——Java EE设计模式解析与应用

    单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图               ...

  5. 0.Java并发包系列开篇

    在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能.一直以来都想写一个Java并发包系列,无奈迟迟没有动手 ...

  6. Java IO设计模式(装饰模式与适配器模式)

    01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作 ...

  7. java多线程设计模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...

  8. Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...

  9. Java经典设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

随机推荐

  1. 静态blog的免费托管部署、加域名与搜索优化(SEO)

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/hugo_blog_host_and_seo 给博客加个域名准备长 ...

  2. GB∕T 35658平台过检 已通过最新的部标JT/T 808-2019, JT/T 809-2019标准检测

    2019年交通部GPS平台检测标准发生了重大变化, 原来的796平台功能标准, 变更为GB/T35658标准, 这个标准其实2017年就公布了, 实际上还是796标准, 但是检测项目,以前是可选的, ...

  3. Tkinter 之MessageBox弹出框

    一.参数说明 语法 作用 截图 tk.messagebox.showwarning(title='提示', message='你确定要删除吗?') 警告信息弹窗   tk.messagebox.sho ...

  4. excel被保护或者锁定时候按住alt和enter可以输入换行

    excel被保护或者锁定时候按住alt和enter可以输入换行

  5. Hive和Hadoop

    我最近研究了hive的相关技术,有点心得,这里和大家分享下. 首先我们要知道hive到底是做什么的.下面这几段文字很好的描述了hive的特性: 1.hive是基于Hadoop的一个数据仓库工具,可以将 ...

  6. 2018-2019-2 网络对抗技术 20165311 Exp 8 Web基础

    2018-2019-2 网络对抗技术 20165311 Exp 8 Web基础 基础问题回答 实践过程记录 1.Web前端:HTML 2.Web前端:javascipt 3.Web后端:MySQL基础 ...

  7. [GitHub]纪华裕的GitHub收藏

    由于GitHub的star没有分类功能在此写下我的收藏. JS nodenodejs的仓库 puppeteer一个用户测试的无头浏览器 moment日期操作库,包括格式化等

  8. decimal赋值

    decimal dRebate1 = new decimal(1);decimal dRebate2 = Convert.ToDecimal(1);decimal dRebate3 = 1M; htt ...

  9. PHP判断是否在微信内部浏览器访问

    <?php if(is_weixin()){ echo "这是微信内部浏览器"; }else{ echo "这是微信外部浏览器"; } function ...

  10. mysql排序自段为字符串类型问题解决

    677     000.000.000.000 2018-01-09 22:20:58 编辑 删除 锁定 199 666/777/888套餐标配     000.000.000.000 2018-01 ...