设计模式(1)-概述

        有幸看过清华大学出版社耿祥义 张跃平出版的"Java设计模式", 他们的讲解的很好, 大家有兴趣可以买书看看. 写这个专栏目的第一是为了督促自己将设计模式学习完, 第二通过写文章方式融入自己的理解.

        另外推荐大家必看一本书《Design Patterns:Elements of Reusable Object-Oriented Software》

目录

1. 什么是设计模式

2. 合理使用设计模式

3. 面向对象的基本原则

3.1 面向抽象原则

3.2 开-闭原则

3.3 多用组合少用继承原则

3.4 高内聚-低耦合原则

4. UML类图简介

4.1 类

4.2 接口

4.3 泛化关系

4.4 关联关系

4.5 依赖关系

4.6 实现关系

4.7 注释

5. 总结


1. 什么是设计模式

        每一个设计模式描述一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次一次地使用该方案而不必做重复劳动。

        这个其实很好理解, 就像我们写代码一样, 重复出现的代码要求被整理成函数. 设计模式面向的是对问题的解决方案.  前人帮我们总结了很多有用的方案.

2. 合理使用设计模式

        当然设计模式是一种经验和思想, 我们解决问题不要为了用设计模式而用. 而是通过学习设计模式培养我们解决问题的思路. 

  • 正确使用. 这个好理解, 不要用错了 , 这个需要我们对每种设计模式十分熟悉. 后面的文章大家要看哦.
  • 避免教条. 实际问题或者场景是非常复杂的, 不是套用一个模式就能解决的. 往往需要很多的方法结合才能解决. 这就需要大家功力了. 先试着教条式的去解决一些小问题, 用才能会用.
  • 模式挖掘. 平常我们都会接触到很多优秀的开源框架. 我们可以去了解人家用了什么设计模式, 用来解决什么问题. 把人家优秀的设计经验学到手.
  • 避免乱用. 不要为了用设计模式而用. 设计和写代码是为了解决问题, 尤其代码要简单易读. 过度的使用设计模式会导致代码冗余复杂.
  • 了解反模式. 了解优秀的设计, 当然我们也要了解一些不良的设计. 帮助自己查漏布缺. 如: 软件膨胀, 反抽象, 万能类, 硬编码, 剪切编程等等.

3. 面向对象的基本原则

        原则这种东西一般都挺抽象的. 抽象的东西要想理解, 就需要自己多动手去实践, 在实践中去理解这些原则. 

3.1 面向抽象原则

        设计一个类时,不让该类面向具体的类,而是面向抽象类或接口 。

3.2 开-闭原则

        设计应当对扩展开放,对修改关闭。

        如果您的设计遵守了“开-闭原则”,那么这个设计一定是易维护的,因为在设计中增加新的模块时,不必去修改设计中的核心模块。

3.3 多用组合少用继承原则

        设计中避开类继承的缺点,充分使用对象组合的优点。

3.4 高内聚-低耦合原则

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

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

4. UML类图简介

        UML的工具大家可以用draw.io, 免费开源. 当然实在不行就用PPT. 但是我们要了解UML中的基本语法. 当然我们设计时不一定要遵守UML, 可以天马行空, 只要组员之间能够相互理解就行. 毕竟文档是为了交流和制定有效的方案. 但UML是一种最佳实践. 大家还是要往标准上靠.

4.1 类

        在UML中,使用一个长方形描述一个类的主要构成,将长方形垂直地分为三层 。

        第1层是名字层,类名字是常规字形,表明该类是具体类,类名字是斜体字形,表明该类是抽象类。

        第2层是变量层,也称属性层,列出类的成员变量及类型,格式是“变量名字:类型”。

        第3层是方法层,也称操作层,列出类的方法及返回类型,格式是“方法名字(参数列表):类型”。

4.2 接口

        表示接口的UML图和表示类的UML图类似,使用一个长方形描述一个接口的主要构成,将长方形垂直地分为三层 。  

        第1层是名字层,接口的名字必须是斜体字形,而且需要用<<interface>>修饰名字,并且该修饰和名字分列在2行。    

        第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。    

        第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。

4.3 泛化关系

        对于面向对象语言,UML中所说的泛化关系就是指类的继承关系。如果一个类是另一个类的子类,那么UML通过使用一个实线连接两个类的UML图来表示二者之间的继承关系,实线的起始端是子类的UML图,终点端是父类的UML图,但终点端使用一个空心的三角形表示实线的结束 

4.4 关联关系

        如果A类中成员变量是用B类(接口)来声明的变量,那么A和B的关系是关联关系,称A关联于B。那么UML通过使用一个实线连A和B的UML图,实线的起始端是A的UML图,终点端是B的UML图,但终点端使用一个指向B的UML图的方向箭头表示实线的结束 。

4.5 依赖关系

        如果A类中某个方法的参数用B类(接口)来声明的变量或某个方法返回的数据类型是B类型的,那么A和B的关系是依赖关系,称A依赖于B。那么UML通过使用一个虚线连A和B的UML图,虚线的起始端是A的UML图,终点端是B的UML图,但终点端使用一个指向B的UML图的方向箭头表示虚线的结束

4.6 实现关系

        如果一个类实现了一个接口,那么类和接口的关系是实现关系,称类实现接口。UML通过使用虚线连接类和它所实现的接口,虚线起始端是类,虚线的终点端是它实现的接口,但终点端使用一个空心的三角形表示虚线的结束 。

4.7 注释

        UML使用注释为类图提供附加的说明。UML在一个带卷角的长方形中显示给出的注释,并使用虚线将这个带卷角的长方形和所它所注释的实体连接起来 。

5. 总结

以上内容为一些基本知识, 后续开始各个设计模式的讲解. 希望自己能够在一个月内写完这个专栏. 

富贵必从勤苦得,男儿须读五车书。加油少年郎!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值