设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

设计模式的起源

软件领域的设计模式起源于建筑学。

1977年,建筑大师Alexander出版了《A Pattern Language:Towns, Building, Construction》一书。受Alexander著作的影响 ,Kent Beck和Ward Cunningham在1987年举行的一次面向对象的会议上发表了论文:《在面向对象编程中使用模式》。

设计模式的分类

1.创建型模式

社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有5个具体的创建型模式可供研究,它们分别是:

工厂方法模式(Factory Method)

抽象工厂模式(Abstract Factory)

创建者模式(Builder)

原型模式(Prototype)

单例模式(Singleton)

2.结构型模式

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

外观模式(Facade)

适配器模式(Adapter)

代理模式(Proxy)

装饰模式(Decorator)

桥模式(Bridge)

组合模式(Composite)

享元模式(Flyweight)

3.行为型模式

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法模式(Template Method)

观察者模式(Observer)

状态模式(State)

策略模式(Strategy)

职责链模式(Chain of Responsibility)

命令模式(Command)

访问者模式(Visitor)

调停者模式(Mediator)

备忘录模式(Memento)

迭代器模式(Iterator)

解释器模式(Interpreter)

GOF的著作

目前,被公认在设计模式领域最具影响力的著作是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides在1994年合作出版的著作:《Design Patterns:Elements of Reusable Object-Oriented Software》(中译本《设计模式:可复用的面向对象软件的基本原理》 或《设计模式》),该书被广大喜爱者昵称为GOF(Gang of Four)之书,被认为是学习设计模式的必读著作,GOF之书已经被公认为是设计模式领域的奠基之作。

面向对象的几个基本原则

1.面向抽象原则

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

举个例子:定义底面为三角形的柱体

2.开-闭原则

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

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

3.高内聚-低耦合原则

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

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

学习设计模式不仅可以使我们使用好这些成功的模式,更重要的是可以使我们更加深刻地理解面向对象的设计思想,非常有利于我们更好地使用面向对象语言解决设计中的问题。

合理使用模式

1.正确使用; 2.避免教条;  3.模式挖掘

from: http://www.cnblogs.com/wuyudong/

java设计模式0--设计模式简介相关推荐

  1. 北邮java作业代码_北邮 java 作业7 设计模式2,李颉老师的课上作业设计模式2

    [实例简介] 北邮 java 作业7 设计模式2,李颉老师的课上作业设计模式2 [实例截图] [核心代码] 67506242buptjavahomework ├── _14211133_孙杨_7_Ad ...

  2. 从Java类库看设计模式

    //From http://www.uml.org.cn/j2ee/201010214.asp 很多时候,对于一个设计来说(软件上的,建筑上的,或者它他工业上的),经验是至关重要的.好的经验给我们以指 ...

  3. java 常用十种设计模式示例归纳 | 已打包请带走

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. GitHub地址 DesignPattern 文章说明 一个Demo,集合常用的十种设计模 ...

  4. 深入浅出设计模式之设计模式简介

    一.什么是设计模式(详见设计模式概念和七大原则) 在GoF(Gang of Four)的书籍<Design Patterns - Elements of Reusable Object-Orie ...

  5. java设计模式并发_[高并发Java 七] 并发设计模式

    [高并发Java 七] 并发设计模式 [高并发Java 七] 并发设计模式 为什么80%的码农都做不了架构师?>>> 在软件工程中,设计模式(design pattern)是对软件设 ...

  6. 3种设计模式的java小程序,java实现的设计模式小程序 模拟Web系统

    [实例简介] java实现的设计模式小程序,应用了策略模式,单例模式,工厂模式,抽象工厂模式,责任链模式.模拟的是Web系统针对不同用户提供不同的功能,可以在此基础上添加自己的代码. [实例截图] [ ...

  7. Java进阶篇设计模式之一 ----- 单例模式

    前言 在刚学编程没多久就听说过设计模式的大名,不过由于当时还是个彻彻底底的菜鸟,并没有去触碰.直到在开始工作中对简单的业务代码较为熟悉之后,才正式的接触设计模式.当时最早接触的设计模式是工厂模式,不过 ...

  8. Java基础篇--设计模式

    目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...

  9. java面试常见设计模式

    java面试常见设计模式 看这里,动画描述很好 创建型模式 工厂方法模式 目的 结构 场景 优缺点 示例代码 button factory Demo.java: 客户端代码 抽象工厂模式 目的 结构 ...

  10. 【Java SE】设计模式

    设计模式的7大原则 1.单一职责原则 SRP 2.里氏替换原则 LSP 3.依赖倒转原则 DIP 4.开闭原则 OCP 5.接口隔离法则 ISL 6.合成复合原则 CRP (CARP) 7.迪米特法则 ...

最新文章

  1. Oracle day05 索引_数据去重
  2. 网络最大流的三种基础算法
  3. Dimple.js基础
  4. c++17(26)-数组、二维数组的指针、指向数组的指针、指向数组的指针的指针
  5. 数据库设计(三)概念数据模型
  6. java 断点续传 开源_java断点续传原理
  7. 剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)
  8. LeetCode 1292. 元素和小于等于阈值的正方形的最大边长(DP)
  9. 奇怪的电梯(信息学奥赛一本通-T1360)
  10. ActiveReports 报表应用教程 (15)---报表换肤
  11. h5自定义相机界面_有没有什么比较好用的H5小程序?
  12. java处理excel-xlsx格式大文件的解决方案
  13. python气象卫星云图解析_零基础python效率提升资源汇总
  14. psvimg格式PSV存档文件解包工具psvimgtools在macOS环境下的使用教程
  15. Hadoop1.0,2.0,3.0区别
  16. 一张图说明白数据安全管理体系的规划
  17. 头条极速版问答自动化教程
  18. android检测蜂窝网络,Android 判断网络状态及开启网路
  19. CSS单位px、em、rem及它们之间的换算关系
  20. 川土微电子CA-IS1300用于电流检测的隔离运放新品上市

热门文章

  1. SpringBoot - 优雅的实现【参数校验】高级进阶
  2. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)
  3. Android Application 之 allowBackup 属性浅析
  4. 微服务如何解决分布式事务
  5. mac 下homebrew 的安装和卸载
  6. spring注解@service(service)括号中的service有什么用?
  7. 如何删除tmp计算机桌面,Win10系统中tmp文件删除不了应该如何解决?
  8. vue中 .sync 修饰符 个人理解
  9. 微信小程序之页面打开数量限制
  10. Matlab绘制不同阻尼下的系统响应