注:设计模式示例代码下载
简单工厂模式
一、概念
属于类的创建型模式,又叫做静态工厂方法模式。对象的创建交由工厂实现,客户端不需要知道对象的创建过程,被创建的实例通常都具有共同的父类。
二、角色和职责
工厂角色:被外界直接调用,创建所需的产品对象。
抽象角色:所创建的所有对象的父类。
具体产品角色:所创建的具体实例对象。
三、优缺点
缺点:该模式中包含必要的判断逻辑,需要根据外界给定的信息,决定究竟应该创建哪个具体类的对象。若新增一个产品,需要在工厂方法中修改判断条件,扩展性并不很好。
工厂方法模式
一、概念
又称为多态工厂模式,通过进一步抽象化,将工厂分为抽象工厂和具体工厂。将实际创建工作推迟到具体工厂当中。可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、角色和职责
抽象工厂角色: 对工厂的抽象。
具体工厂角色:具体工厂,创建具体的产品对象。
抽象角色: 所创建的所有对象的父类。
具体产品角色:所创建的具体实例对象。
三、优缺点
优点:通过将工厂抽象化,相比简单工厂更具扩展性。
缺点:每增加一种对象,就需要创建一个具体工厂,使得具体工厂过多。
抽象方法工厂
一、概念
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。涉及到的产品族、产品结构示
意图如下:
二、角色和职责
抽象工厂角色:包含对多个产品结构的声明。
具体工厂角色: 负责实例化某个产品族中的产品对象。
抽象角色:所创建的所有对象的父类。
具体产品角色:抽象模式所创建的具体实例对象
抽象工厂中方法对应产品结构,具体工厂对应产品族。
三、优缺点
对静态工厂、工厂方法进行改进,使其具有扩展性、适应性。
单例模式
一、概念
单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。
二、实现方式
1.饿汉式。2.懒汉式。3.双重检查。
三、应用场景
(1)在多个线程之间,比如servlet环境,共享同一个资源或者操作同一个象。
(2)在整个程序空间使用全局变量,共享资源
(3)大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。
原型模式
一、概念
对象创建型模式,它采取复制原型对象的方法来创建对象的实例。复制后两个对象具有相同的结构和数据。
二、特点
1. 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
2.目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型
对象具有相同的结构,还与原型对象具有相同的值。
3.根据对象克隆深度层次的不同,有浅度克隆与深度克隆。
建造者模式
一、概念
对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。
二、结构图
装饰模式
一、概念
又叫做包装模式。对原有对象包装、扩展,以获取新的行为、功能,比如Java IO流的包装,是继承关系的一个替换方案。
二、结构图
三、角色和职责
抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。
具体组件角色:为抽象组件的实现类。抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。
具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。
策略模式
一、概念
属于行为模式。它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法 选择交由客户端决定(策略)
二、结构图
三、角色和职责
Strategy:策略(算法)抽象。
ConcreteStrategy:各种策略(算法)的具体实现。
Context : 策略的外部封装类,或者说策略的容器类。根据不同策略执行不同的行为。策略由外部环境决定。
观察者模式
一、概念
属于行为模式,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
二、结构图
三、角色和职责
Subject:被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)
一个观察者对象的队列列表。
ConcreteSubject: 被观察者的具体实现。包含一些基本的属性状态及其他操作。
Observer(观察者):接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。
ConcreteObserver:观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。
四、应用场景
侦听事件驱动程序设计中的外部事件
侦听/监视某个对象的状态变化
发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,
通知邮件列表中的订阅者
享元模式
一、概念
属于构造型模式,它通过与其他类似对象共享数据来减小内存占用。
二、结构图
三、角色和职责
享元角色:实现了抽象享元角色规定的方法。
享元工厂角色:负责创建和管理享元角色。
代理模式
一、概念
属于构造型的设计模式,它可以为对象提供一种代理以控制对这个对象的访问。
二、结构图
三、角色和职责
Subject(抽象主题角色):真实主题与代理主题的共同接口。 RealSubject(真实主题角色):定义了代理角色所代表的真实对象。
Proxy(代理主题角色):含有对真实主题角色的引用,代理角色通常在将客户端调用传递给真是主题对象之前或者之后执行某些操作,而不是单纯返回真实 的对象。
四、Java中的动态代理
1. InvocationHandler 接口
2. invoke方法
3. Proxy.newProxyInstance();