Java的设计模式之开篇(1)
什么是设计模式呢?这个问题曾经一直困扰着我,以前我一直以为这是门新的技术,但是随着工作年限和工作经验的增加,其实设计模式就是已经在众多软件系统得到验证的成功的并且可复用的技术方案或者解决问题的方案。Java是目前最主流的开发语言之一,在众多的实践中,总结出了多个设计模式,学习这个模式有助于程序员写出高质量的而又有效的代码。因此一种设计模式能够解决类似的问题,并加以复用。但是在实际的编程中可能在解决一个问题时组合使用多个设计模式,这就要我们要活学活用了。
对于Java的设计模式来说,目前流行的主要有23种,这些设计模式解决了Java程序开发中的大多数的设计问题。在这先说说代码编程中的一些原则,也就是设计模式的初衷吧。
1.面向抽象原则
指当设计一个类 时,不让该类面向具体的类,而是面向抽象类或者接口类,即所设计类中的重要数据是抽象类或者接口声明的变量,而不是具体声明的变量。我的理解是Java里的多态,就是一个模块中各个功能点都会用到方法的高度抽象和提取,是普遍具有的行为动作。往往找这个抽象类比较难,需要不断思考,然后抽丝剥茧。
2.开 - 闭原则
就是让设计对扩展开放,对修改关闭。怎么理解这句话呢?其实是指当一个设计中增加新的模块时,不需要修改现有的模块。在给出一个设计时,要充分考虑客户需求的变化,将客户变化的部分设计为对外扩展开放,而设计的核心部分是经过精心考虑之后确定下来的基本结构,这部分要对修改关闭。也就是说不能因为用户的需求变化了,核心的基本结构代码做修改。遵守开 - 闭原则的设计肯定是易于维护的,因为在设计中增加新的模块是,不用修改设计中的核心模块。
这里不是说系统的每个部分都要遵守这个原则,而是在把主要精力集中在应对设计中最有可能因为需求变化而需要改变的地方,然后想办法应有这个原则加以解决。
当设计一个系统时,经常需要面向对象来考虑系统的总体设计,不要考虑具体类,这样就容易设计出满足 开 - 闭 原则的系统,在程序设计好以后,首先对abstract类的修改关闭,否则,一旦修改abstract类,比如,增加一个abstract方法,那么所有的子类都要进行修改;应当增加abstract类的子类开发,即在程序中再增加子类时,不需要修改其他面向抽象类而设计的重要类。
3.多用组合少用继承原则
(1)继承和复用
子类继承父类的方法可以作为自己的方法,实现了代码的复用,并且可以重写父类的方法,用于扩展。
但是子类和父类是强耦合的关系,也就是说父类修改时势必会影响子类,并且父类的内部结构,子类也是一清二楚。
(2)组合与复用
一个类可以把对象作为自己的成员变量,那么这个类就是其他类的组合了,那么其他对象就可以调用该对象的方法了。
当前对象包含的对象中方法的具体实现对当前对象是不可见的;
组合关系是弱耦合关系,修改当前对象所包含的对象中代码不用修改当前对象代码;
当前对象可以在运行是动态指定所包含的具体对象,例如成员变量是个接口,运行时可以动态指定实现类;
这个缺点就是可能会导致系统中的对象过多,为了组合多个对象必须得仔细对接口进行定义。
(3)多用组合,少用继承
这样做的目的就是为了写出低耦合的代码。
4.高内聚 - 低耦合原则
如果类中的方法是一组相关的行为,则称该类是高内聚,反之称为低内聚。高内聚便于类的维护,低内聚不利于维护。
低耦合就是尽量不要让一个类含有太多其他类的实例引用,避免修改系统其中一部分会影响其他部分。
Java的设计模式之开篇(1)的更多相关文章
- 从.Net到Java学习第一篇——开篇
以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...
- 基于java的设计模式入门(1)——为什么要学习设计模式
大年初一,楼主在这里给大家拜年,祝大家码上升职加薪,码上有对象结婚,码上有车有房,幸福安康. 过完年,回学校注册报道之后,大概就要回深圳到公司开始实习了.提高自己,无非就有两种方式,一是看书学习,二是 ...
- Java 反射 设计模式 动态代理机制详解 [ 转载 ]
Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...
- 单例模式——Java EE设计模式解析与应用
单例模式 目录: 一.何为单例 二.使用Java EE实现单例模式 三.使用场景 一.何为单例 确保一个类只有一个实例,并且提供了实例的一个全局访问点 1.1 单例模式类图 ...
- 0.Java并发包系列开篇
在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能.一直以来都想写一个Java并发包系列,无奈迟迟没有动手 ...
- Java IO设计模式(装饰模式与适配器模式)
01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作 ...
- java多线程设计模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...
- Java经典设计模式之十一种行为型模式(附实例和详解)
Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...
- Java经典设计模式之七大结构型模式(附实例和详解)
博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...
随机推荐
- python pillow 处理图片
demo1 #打开图片,并随机添加一些椒盐噪声 from PIL import Image import numpy as np import matplotlib.pyplot as plt img ...
- C# 获取网络文件 批量压缩成 文件流 并下载 压缩包
需要的DLL : ICSharpCode.SharpZipLib.dll JS部分 //下载所有文件的 压缩包 function DownAllFile() { //zip文件名 var zipNam ...
- WebRTC MediaStream接口
MediaStream API旨在方便地从用户本地摄像机和麦克风访问媒体流.getUserMedia()方法是访问本机输入设备的主要方式. API有几个关键点: 1. 实时视频或音频以流对象的形式表示 ...
- 控制器,action, 过滤器, 权限
这个是重点学习对象 控制器 https://www.cnblogs.com/caoyc/p/5671687.html 还有这个 https://www.cnblogs.com/leoo2sk/arc ...
- Spring和Quartz整合实现定时任务调度
在Spring中可以很方便的使用Quartz来实现定时任务等功能,Quartz主要就是Schedule(任务调度器),Job(作业任务)和Trigger(触发器)三者的关系. 实现方式有多种,在此就介 ...
- 代码检查p626
1 编译运行p626 图10-3代码,提交编译运行的截图 2 STDOUT_FILENO的值是多少?提交在Ubuntu中查找这个值的命令截图
- redis配置文件讲解
#redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ############### ...
- ISO/IEC 9899:2011 条款6.4.4——常量
6.4.4 常量 语法 1.constant: integer-constant floating-constant enumeration-constant character-constant 约 ...
- load ifc
void setRootNode( osg::Group* root ) { m_main_view->setSceneData( root ); if( m_hud_camera ) { ro ...
- 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器
加群452892873 下载对应39课文件,运行方法,建好项目,直接替换lib目录 pubspec.yaml city_pickers: ^ AddressAdd.dart import 'packa ...