
设计模式
lixiang0522
好好学习,天天向上。
展开
-
创建型设计模式(1):单例模式
动机有时候只有一个类的实例是很重要的。比如,一个系统应该只有一个窗口管理实例。单例模式是最简单设计模式:类负责实例化自己,确保只有一个实例,并且提供一个访问这个实例的入口。目的1. 确保只有一个实例被创建。2. 提供访问这个实例的入口。实现使用final确保被创建一次,private的构造函数确保不被实例化。public的getInsta原创 2013-04-15 10:46:46 · 1104 阅读 · 0 评论 -
创建型设计模式(2):简单工厂模式
动机简单工厂模式是抽象工厂和工厂方法的基础和初步实现。目的1. 不向客户透露对象实例化的细节。2. 通过通用接口创建对象。实现实现非常简单:1. Client需要Product时,不使用new来创建,而是提供 Product 描述给Factory,让 Factory 提供一个新的 Product 。2. Factory实例化一个Product原创 2013-04-15 11:31:26 · 993 阅读 · 0 评论 -
创建型设计模式(3):工厂方法模式
动机创建一个对象往往需要复杂的过程,所以不适合包含在一个复合工厂中,当有新的产品时,需要修改这个复合的工厂,不利于扩展。而且,有些对象的创建可以需要用到复合工厂访问不到的信息,所以,定义一个工厂接口,通过实现这个接口来决定实例化那个产品,这就是工厂方法模式,让类的实例化推迟到子类中进行。目的1. 定义一个接口,让子类决定实例化哪个产品。2. 通过通用接口创建对象原创 2013-04-15 14:20:38 · 932 阅读 · 0 评论 -
创建型设计模式(5):建造者模式
定义又叫生成器模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。当创建复杂对象的算法应该独立于该对象的组成部分时,而且构造过程必须允许被构造的对象有不同的表示时。我们可以考虑使用建造者模式。实现1. Builder为创建一个Product对象的各个部件指定抽象接口。通常包含创建产品和返回产原创 2013-04-16 14:23:28 · 948 阅读 · 0 评论 -
创建型设计模式(4):抽象工厂模式
定义抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。“工厂”是创建产品(对象)的地原创 2013-04-16 14:19:31 · 844 阅读 · 0 评论 -
创建型设计模式(6):原型模式
定义原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。实现1. Client - 创建一个新的对象,然后通过cl原创 2013-04-16 14:25:04 · 936 阅读 · 0 评论 -
结构型设计模式(1):适配器模式
定义适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起。有两类适配器模式:1. 对象适配器模式 - 对象适配器通过关联满足用户期待接口,还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。2. 类适配器模式 - 这种适配器模式下,适配器继承自已实现的类原创 2013-04-17 16:13:10 · 1050 阅读 · 0 评论 -
结构型设计模式(2):桥接模式
动机有些时候一个抽象应该有不同的实现,比如,保存数据时有两种方式,一种是文件方式,一种是数据库方式,通常的做法是继承保存数据的类,然后实现不同的保存方式。这样做的问题就是难于修改和扩展保存方式,运行时无法切换保存方式。定义桥接模式是软件设计模式中最复杂的模式之一,它将事物的抽象部分与它的实现部分分离,使它们都可以独立地变化。如“圆形”、“三角形”归于抽象的“形状”之原创 2013-04-17 16:14:28 · 1187 阅读 · 0 评论 -
设计模式原则(6):迪米特原则
迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.不和陌生人说话,就是说只和朋友说话,那么什么是朋友呢?1. 类中的函数。2. 类中函数的参数。3. 函数中实例化的对象。4. 类的成员变量。5. 类知道的全原创 2013-04-12 14:08:06 · 1121 阅读 · 0 评论 -
设计模式原则(4):开闭原则
定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。对扩展开放,意思就是可以对类、模块和函数添加新的功能。对修改关闭,意思就是扩展时最好不要修改原来的类和函数等。下面的例子来自http://www.oodesign.com/open-close-principle.html先是一个不好的例子: class GraphicEditor { publi原创 2013-04-11 21:01:06 · 1043 阅读 · 0 评论 -
设计模式原则(5):接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。就是说,“不应该强迫客户依赖于它们不用的方法。”再通俗点说,不要强迫客户使用它们不用的方法,如果强迫用户使用它们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。我们先看一个违反接口隔离的例子:public interface IWorker { public void原创 2013-04-12 14:07:01 · 1035 阅读 · 0 评论 -
类的6大关系:依赖,关联,聚合,组合,泛化,实现
1. 依赖,Dependency,虚线+箭头(箭头指向依赖的对象)从字面上理解就是,一个类中的方法的实现依赖另外一个类,主要描述的就是类与类之间的使用关系。Java中依赖的对象以局域变量、方法的形参,或者对静态方法的形式出现。比如:学生类中有一个读书方法,这个方法需要一个书的对象,可以是方法的局部变量,也可以是参数。2. 关联,Association,实线+箭头(箭头指向关原创 2013-04-08 16:36:30 · 1550 阅读 · 0 评论 -
设计模式原则(1):单一职责原则
单一职责原则:一个类,只有一个引起它变化的原因。为什么需要单一职责原则?如果一个类有多个原因要去修改它,那么修改一个功能时,可能会让其他功能产生Bug,所以一个类最好只有一个职责。但实际应用中还是比较难实现的,我们只能是尽量符合这个原则。例子:public class Task { public File downloadFile(String path){原创 2013-04-09 17:53:30 · 819 阅读 · 0 评论 -
设计模式原则(2):里氏替换原则
里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。意思就是说,一个地方引用了父类,程序可以正常运行,如果把引用父类的地方换成子类,这个程序也应该能够正常运行。例子:public class Rectangle { int width; int height; public Rectangle(int w, int h){ width = w; heig原创 2013-04-10 14:39:54 · 974 阅读 · 0 评论 -
设计模式原则(3):依赖倒置原则
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。具体到Java中就是“面向接口编程”。例子:违法依赖倒置的情况public class Student { public void read(Book book){ System.out.println("学生开始阅读:"+book.getName()); }}pub原创 2013-04-11 14:07:10 · 846 阅读 · 0 评论 -
创建型设计模式(7):对象池模式
定义一个对象池是一组已经初始化过且可以使用的对象的集合,池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非销毁它。若初始化、实例化的代价高,且有需求需要经常实例化,但每次实例化的数量较少的情况下,使用对象池可以获得显著的效能提升。从池子中取得对象的时间是可预测的,但新建一个实例所需的时间是不确定。实现1. Reusable -原创 2013-04-17 16:11:28 · 2930 阅读 · 0 评论