设计模式那些事

什么是设计模式?我们为什么要学习和使用设计模式?设计模式又有哪些?这里博主根据自己所了解的内容做一简单介绍。

1、什么是设计模式?

设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的代码设计经验的总结。

2、我们为什么要学习和使用设计模式?

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

3、设计模式又有哪些?

我们现在所说的设计模式大多数都指的是GOF设计模式,主要分为创建型、结构型、行为型3类,共有12种模式。

ps:《Design Patterns: Elements of Reusable Object-Oriented Software》(即《设计模式:可复用面向对象软件的基础》),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",也就是所谓的GOF。

 

一、创建模式

1.1 设计模式之 Singleton(单态/单件/单例)

保证一个类只有一个实例,并提供一个访问它的全局访问点。

1.2 设计模式之 Factory(工厂)

使用工厂模式就象使用 new 一样频繁。

ps:工厂模式有简单工厂模式和抽象工厂模式两种。

1.3 设计模式之 Builder(建造者)

汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两种情况分开进行。

1.4 设计模式之 Prototype(原型)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、结构模式

2.1 设计模式之 Adapter(适配器)

使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java 中提到过。

2.2 设计模式之 Proxy(代理)

以 Jive 为例,剖析代理模式在用户级别授权机制上的应用。

2.3 设计模式之 Facade(外观)

可扩展的使用 JDBC 针对不同的数据库编程,Facade 提供了一种灵活的实现。

2.4 设计模式之 Composite(组合)

就是将类用树形结构组合成一个单位。你向别人介绍你是某单位,你是单位中的一个元素,别人和你做买卖,相当于和单位做买卖。文章中还对 Jive 再进行了剖析。 

2.5 设计模式之 Decorator(装饰器)

Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色。

2.6 设计模式之 Bridge(桥连)

将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合)。 

2.7 设计模式之 Flyweight(共享元)

提供 Java 运行性能,降低小而大量重复的类的开销。

三、行为模式

3.1 设计模式之 Command(命令)

什么是将行为封装,Command 是最好的说明。

3.2 设计模式之 Observer(观察者)

介绍如何使用 Java API 提供的现成 Observer 。

3.3 设计模式之 Iterator(迭代器)

这个模式已经被整合入Java的 Collection。在大多数场合下无需自己制造一个Iterator,只要将对象装入 Collection 中,直接使用 Iterator 进行对象遍历。 

3.4 设计模式之 Template(模板方法)

实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍。

3.5 设计模式之 Strategy(策略)

不同算法各自封装,用户端可随意挑选需要的算法。

3.6 设计模式之 Chain of Responsibility(责任链)

各司其职的类串成一串,好象击鼓传花,当然如果自己能完成,就不要推委给下一个。

3.7 设计模式之 Mediator(中介)

Mediator 很象十字路口的红绿灯,每个车辆只需和红绿灯交互就可以。

3.8 设计模式之 State(状态)

状态是编程中经常碰到的实例,将状态对象化,设立状态变换器,便可在状态中轻松切换。

3.9 设计模式之 Memento(备忘录)

很简单一个模式,就是在内存中保留原来数据的拷贝。

3.10 设计模式之 Interpreter(解释器)

主要用来对语言的分析,应用机会不多。

3.11 设计模式之 Visitor(访问者)

访问者在进行访问时,完成一系列实质性操作,而且还可以扩展。

 

posted on 2018-01-22 19:25  Arthurian  阅读(558)  评论(0编辑  收藏  举报