二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#
必要的基础知识—旅行前的准备
工欲善其事,必先利其器。——《论语》
要开始一场旅行,准备的工作肯定不能少,不能太任性,一场说走就走的旅行,也需要基础条件的,那么本次就做做一些旅行之前的准备和说明,一场完美的旅行一定是经过准备后进行的,只有经过精心的准备我们才会在道路上玩的开始,玩的舒服。假如没有进行准备,就开始了旅行,出发前忘记了身份证,那么就尴尬了!好的了,废话不多说,下面开始说明本次旅途前需要带上的最基础的东西(知识/概念)。
面向对象(OO)基础 - #旅行必备
本次和设计模式一起去旅行使用的工具是java语言,那么必须要了解java的语法以及java中面向对象的核心思想!
抽象
抽象:一个概念或者一个想法不和具体的实例绑定!
简单的说就是一个概念,只说不做,不包含具体的实现!
在java中J关于抽象最常被讨论的是abstract类和interface!
Java 抽象类
Java 接口
继承[Java的特性]
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java 继承
封装[[Java的特性]]
封装: 指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
Java 封装
多态[[Java的特性]]
多态是同一个行为具有多个不同表现形式或形态的能力。
一定要记住:多态存在的三个必要条件
- 继承
- 重写
- 父类引用指向子类对象
Java 多态
软件的设计原则 - #一场完美的旅行要知道的原则
【摘自百度百科】
- 可靠性
- 健壮性
- 可修改性
- 容易理解
- 程序简便
- 可测试性
- 效率性
- 标准化原则
- 先进性
- 可扩展性
- 安全性
面向对象(OO)设计原则 - #旅行中的温馨提示
在旅途要注意的,不能人半夜出去逛,不能无车牌陌生人的车,不能吃路边树上的野果。。。。记住这些原则,旅途就会更安全一点。
在面向对象软件系统的设计中,能提供良好的可维护性,并同时提高系统的可复用和可扩展性是设计需要解决的核心问题之一。
请时刻记住这三条核心的原则:
1. 封装变化
2. 多用组合,少用继承
3. 针对接口编程,不针对实现编程
下面是常见六种面向对象的设计原则:
- 单一职责原则(Single Responsibility Principle,SRP),一个类只负责一个功能中的相应职责
- 开闭原则(Open-Closed Principle,OCP),软件实体对应的扩展开发,而对修改关闭
- 里斯替换原则(Liskov Substituion Principle,LSP),所有引用基类的地方能够透明地使用其他子类对象
- 依赖倒置原则(Dependence Inversion Principle,DIP),抽象不应该依赖细节,细节应该依赖于抽象
- 接口隔离原则(Interface Segregation Principle,ISP),使用对个专门的接口,而不使用单一的总接口
- 迪米特法则(Law of Demeter ,LoD),一个软件实体应当尽可能少地与其他实体发生相互作用
单一职责原则
单一职责原则,说简单点就是,一个类最好只负责一个领域的职责,或者说应该有且仅有一个原因引起类的变更!
比如一个用户接口类中有:
- (1)连接数据库
- (2)查询用户信息
- (3)生成用户报表
那么此时这个类就不是单一职责类!
用户接口类应该只包含用户信息查询一个!
开闭原则
抽象化(接口)是开闭原则的关键!
一句话,对修改关闭,对扩展开放。
里氏代换原则
里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。
面向对象中多态的使用!~
里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
依赖倒转原则
依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
接口隔离原则
每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
迪米特法则
迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。
在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。
关于UML - #旅行指示和路标
旅途中我们会去很多地方,可能有时候会迷路,此时我们需要画一些路线图,或者看路标,这样能更加快速的让我们到达目的地。
在掌握了上面的基础知识和设计原则上,我们还要知道UML,这样能够快速的了解类和类之间的关系或者类和类之间的调用关系等!
UML(Unified Modeling Language)统一建模语言:能够让系统可视化,让规格和设计文档化的表现方法。
简单介绍几个:
类图
UML中的类图用于表示类、接口、实例等之间的相互静态关系,虽然叫做类图,但是图中不仅仅只有类。
软件设计——UML类图详解
时序图
UML时序图(sequence diagram):表示程序在工作时其内部方法调用的顺序,以及事件的发生顺序。
UML建模之时序图(Sequence Diagram)
类图表示的是类之间静态的关系,时序图表示类之间动态的关系!
画类图和时序图的工具很多,可以使用Visio,Jude等
参考
Java 教程
《图解设计模式》
《HeadFirst 设计模式》
本专栏文章列表
一、设计模式-开篇—为什么我要去旅行? #和设计模式一起旅行#
二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#
三、设计模式介绍—她是谁,我们要去哪里? #和设计模式一起旅行#
四、单例模式—不要冒充我,我只有一个! #和设计模式一起旅行#
五、工厂模式—旅行的钱怎么来 #和设计模式一起旅行#
六、策略模式—旅行的交通工具 #和设计模式一起旅行#
七、观察者模式——关注我,分享旅途最浪漫的瞬间! #和设计模式一起旅行#
八、装饰者模式—巴厘岛,奶茶店的困扰! #和设计模式一起旅行#
九、命令模式—使用命令控制奶茶店中酷炫的灯 #和设计模式一起旅行#
十、模板方法模式—制作更多好喝的饮品! #和设计模式一起旅行#
十一、代理模式 —专注,做最好的自己!#和设计模式一起旅行#
十二、适配器模式——解决充电的烦恼 #和设计模式一起旅行#
十三、外观模式—— 简化接口 #和设计模式一起旅行#
十四、迭代器模式—— 一个一个的遍历 #和设计模式一起旅行#
十五、组合模式—— 容器与内容的一致性 #和设计模式一起旅行#
十六、状态模式—用类表示状态 #和设计模式一起旅行#
十七、访问者模式-访问数据结构并处理数据 #和设计模式一起旅行#
十八、职责链模式-推卸责任,不关我的事,我不管!#和设计模式一起旅行#
十九、原型模式—通过复制生产实例 #和设计模式一起旅行#
二十、设计模式总结—后会有期 #和设计模式一起旅行#
如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!
如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!
欢迎访问我的csdn博客,我们一同成长!
不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!
博客首页 : http://blog.csdn.net/u010648555
二、设计模式-必要的基础知识—旅行前的准备 #和设计模式一起旅行#相关推荐
- 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc
计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...
- 超详细的Java面试题总结(二)之Java基础知识篇
系列文章: 超详细的Java面试题总结(一)之Java基本知识 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java面试题总 ...
- 设计模式学习笔记-基础知识篇
1. 设计模式的重要性 1.1 设计模式解决的是在软件过程中如何来实现具体的软件功能.实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案. 1.2 设 ...
- SEO小白学习与实践(二):SEO相关基础知识与自有网站诊断
前言 两年前建网站的时候,一切都是从百度检索开始的,遇到问题就问度娘.后来发现,这样的方法不是很好.度娘可以帮助解决铁定问题,但是非常系统的知识最好还是从书本上获取.于是,这次SEO学习咱就改变思路, ...
- 机器学习知识点(二十)矩阵奇异值分解基础知识及Java实现
1.奇异值分解基础知识 特征值分解提取矩阵特征只适用于方阵,对于N * M的矩阵要用奇异值分解: 假设A是一个N * M的矩阵,奇异值分解得到的U是一个N * N的方阵(里面的向量是正交的,U里面的向 ...
- TCP/IP协议(二)tcp/ip基础知识
转载:http://www.cnblogs.com/imyalost/p/6139191.html 一.TCP/IP的标准化 1.TCP/IP的含义 一般来说,TCP/IP是利用IP进行通信时所必须用 ...
- 【Python的自学之路】(二):学习python的基础知识
目录 序言 内容 跋文 序言 通过#[Python的自学之路](一)学习python的第一课#之后,我想基本上python环境工具等都安装好了吧,下面我们就先一起来了解了解一下python. 内容 p ...
- (二)python爬虫基础知识续
爬虫基础知识二 爬虫应用 数据爬取(微指数) 搜索引擎 app或网页的资源来源 浏览器能做的事情,原则上爬虫都能完成 12306抢票(机器学习可以识别验证码,或者在不需要验证码的合作网站爬取)(微信和 ...
- python中如何将字典直接变成二维数组_python基础知识(列表、字典、二维数组)...
记得改参数!!! (1)简述列表(list)结构的特点. List(列表) List的元素以线性方式存储,可以存放重复对象,List主要有以下两个实现类: ArrayList : 长度可变的数组,可以 ...
最新文章
- Golang的指针类型
- html5 canvas获取坐标系,HTML5 Canvas坐标变换
- mysql安装innodb插件
- 【计算机科学基础】计算理论初步
- shell编程之进阶篇一表达式
- mysql cpu高 重启无效_解决mysqlcpu高的问题
- vivado 一次性设置多线程编译
- [NAACL18]What's Going On in Neural Constituency Parsers? An Analysis(神经成分句法分析器的一些分析)...
- Maven—Eclipse中配置Maven
- 音视频基础:H264、H265、MPEG-4、VP8、VP9编码基础知识
- 在TMS320F28XXX DSP上实现从flash拷贝整个程序到ram运行的方法探讨
- App Store 上架流程
- 《亲密关系》读后感_设计的直觉和亲密感
- 央行降准对股市的影响利好还是利空?
- ios android 跨平台工具,15个很优秀的跨平台的移动开发工具
- Windows中通过命令行新建文件夹、新建文件
- 介绍一个用于EOS区块链的RPC API接口的PHP开发包SDK
- less-用法:简介、变量、混合、嵌套、运算、转义、函数、映射、作用域、注释、导入、继承、条件判断
- WIN10操作系统解决磁盘文件只读属性问题
- 基本图形:直线(Line)