Prototype /Template Method/Iterator/Composite/Bridge
为什么把这五种设计模式放一起呢,没什么太高大上的原因,就是因为这五种模式JAVA开发最基本的特征或者设计原则,也是开发中最常见,甚至常见到我们都没有认为他是一种设计模式。
一、Prototype
原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆自身的方法,就可以通过这个方法来获取新的对象,而无须再去通过new来创建。
Prototype类需要具备以下两个条件:
实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
重写Object类中的clone方法。Java中,所有类的父类都是Object类,Object类中有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,Prototype类需要将clone方法的作用域修改为public类型。
java中的Prototype是显而易见的。在这里我们需要关注的不是Prototype模式本身,而是要关注深拷贝和浅拷贝
浅度克隆
只负责克隆按值传递的数据(比如基本数据类型、String类型),而不复制它所引用的对象,换言之,所有的对其他对象的引用都仍然指向原来的对象。
深度克隆
除了浅度克隆要克隆的值外,还负责克隆引用类型的数据。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深度克隆把要复制的对象所引用的对象都复制了一遍,而这种对被引用到的对象的复制叫做间接复制。
深度克隆要深入到多少层,是一个不易确定的问题。在决定以深度克隆的方式复制一个对象的时候,必须决定对间接复制的对象时采取浅度克隆还是继续采用深度克隆。因此,在采取深度克隆时,需要决定多深才算深。此外,在深度克隆的过程中,很可能会出现循环引用的问题,必须小心处理。
利用序列化实现深度克隆
把对象写到流里的过程是序列化(Serialization)过程;而把对象从流中读出来的过程则叫反序列化(Deserialization)过程。应当指出的是,写到流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。
在Java语言里深度克隆一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的拷贝)写到一个流里(序列化),再从流里读回来(反序列化),便可以重建对象。
public Object deepClone() throws IOException, ClassNotFoundException{
//将对象写到流里
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
//从流里读回来
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
return ois.readObject();
}
这样做的前提就是对象以及对象内部所有引用到的对象都是可序列化的,否则,就需要仔细考察那些不可序列化的对象可否设成transient,从而将之排除在复制过程之外。
关于transient
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
二、Template Method
模板方法的一般代码结构如下:
abstract class AbstractClass
{
//模板方法
public void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
PrimitiveOperation3();
} //基本方法—具体方法
public void PrimitiveOperation1()
{
//实现代码
} //基本方法—抽象方法
public abstract void PrimitiveOperation2(); //基本方法—钩子方法
public virtual void PrimitiveOperation3()
{ }
}
非常常见,普遍。模板方法只需记住一句:先用接口/抽象类确定业务标准,然后由子类做具体的业务实现
三、Iterator
迭代器模式有叫做游标(Cursor)模式。定义:提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。
java所有的容器类(Collection,List、Set、Map)都已经实现了容器自己的迭代器
四、Composite
合成模式非常好理解,就是一个树形结构,树枝和叶子都符合一个标准,树枝要支持叶子的管理。最好的例子就是android中View和ViewGroup
合成模式分为安全型和透明型,安全型就是标准中不包括树枝中叶子的管理,而透明型就是标准中包括了树枝中叶子的管理(树枝和叶子结构完全一致)
aaarticlea/png;base64,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" alt="" />安全型
aaarticlea/png;base64,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" alt="" />透明型
android中View和Viewgroup结合了安全型和透明型的特点,View是叶子的标准,ViewGroup是树枝的标准,而ViewGroup又是符合View的标准。
五、Bridge
桥梁模式是看起来简单,但其实很讲“思想”的一个模式
我们一般面向对象编程,会比较重视抽象和实现,而一般情况下,抽象和实现都是通过继承来实现。这样的结果就是继承这种强关系下,抽象和实现的耦合性就较强。
而桥梁模式的主要思想就是既实现标准和实现的提取,又实现了抽象和实现的解耦。
桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。
aaarticlea/png;base64,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" alt="" />
从上图我们可以看到,其实原本我们的目的是RefinedAbstraction类要符合Implementor的标准,但是如果RefinedAbstraction直接去实现Implementor,那么二者的耦合性就比较强,试想,如果我们的项目代码中一个类要实现很多标准的功能,那么这个类就要实现很多的标准,这样下去代码耦合性就太强,且代码也比较乱。
采用桥梁模式,RefinedAbstraction和Implementor的关系是聚合这种弱关系,且附加业务(即implementor标准的实现)在原本的业务类(即RefinedAbstraction)外面实现,实现了解耦合。
分别用一句话总结这五种设计模式:
1.原型模式 无需新建,clone自身,注意深浅拷贝
2.模板方法模式 先用接口/抽象类定义业务标准,然后在子类中实现具体业务功能
3.迭代器模式 提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。Java的集合类都已经实现了自己的迭代器。
4.合成模式 树形结构,有树枝和叶子两种节点,安全型和透明型的区别就是标准中有没有包含树枝中管理节点的功能。android View/Viewgroup是最好的例子
5.桥梁模式 一般的抽象和实现都是模板方法方式的采用继承的结构,这样耦合性太强。我们将附加业务的实现采用聚合的方式加入原有基本业务的实现中,即实现了标准和实现的分离,又实现了功能间的解偶。
参考资料:
《java与模式》
Design Pattern —— Prototype /Template Method/Iterator/Composite/Bridge的更多相关文章
-
Design Pattern ->;Prototype
Layering & Contract Philosophy With additional indirection Prototype The example code is as foll ...
-
[design pattern](5) Factory Method
前言 在前面一章博主介绍了简单工厂模式(Simple Factory),接着上面的章节,今天博主就来介绍下工厂方法模式(Factory Method). 思考题 首先,让我们来思考下面的问题: 在上一 ...
-
Template Method Design Pattern in Java
Template Method is a behavioral design pattern and it’s used to create a method stub and deferring s ...
-
设计模式-模板方法设计模式--Template Method design pattern
/** * Abstract implementation of the {@link org.springframework.context.ApplicationContext} * interf ...
-
深入浅出设计模式——模板方法模式(Template Method Pattern)
模式动机 模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一.在模板方法模式中,可以将相同的代码放在父类中,而将不同的方法实现放在不同的子类中.在模板方法模式 ...
-
设计模式 - 模板方法模式(template method pattern) JFrame 具体解释
模板方法模式(template method pattern) JFrame 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(templ ...
-
设计模式系列13:模板方法模式(Template Method Pattern)
定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. --<设计模式GoF> UML类图 使用场景 有 ...
-
设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习";模板方法模式";(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
-
乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
原文:乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 模板方法模式(Template Method ...
随机推荐
-
javac 命令用法
引用自己写的Class 在java中手动编译时,总提示找不到类,调试成功后,特把目录结构与编译成功的命令列出: 样例一: 文件名 MessageStore.java Hello.java 源码 pac ...
-
Mysql捕捉(网站)应用执行的语句
如题,很多时候我们需要知道某个程序或者网站链接到额数据库到底执行了什么语句,对于MSsql来说, 比较简单,有相对应的事件查看器,但是对于mysql来说,并没有这个组件或者相关配套工具,此时我们可以 ...
-
setNeedsDisplay、layoutSubViews
UIView的setNeedsDisplay和setNeedsLayout方法.首先两个方法都是异步执行的.而setNeedsDisplay会调 用自动调用drawRect方法,这样可以拿到UIGra ...
-
微信JS-SDK使用步骤(以微信扫一扫为例)
概述: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...
-
UVA 673 Parentheses Balance (栈)
题意描述: 给出一段只包含()和[]的字符串,判断是否合法,合法输出YES,不合法输出NO 规则: 1.该串为空,则合法 2.若A合法,B合法,则AB合法 3.若A合法,则(A)和[A]均合法 解题思 ...
-
Dart语言入门(一)
Dart 语言介绍 Dart 是谷歌在 2011 年推出的编程语言,是一种结构化 Web 编程语言,允许用户通过 Chromium 中所整合的虚拟机(Dart VM)直接运行 Dart 语言编写的程序 ...
-
python之xml模块
# XML 模块的操作参考链接 # http://www.cnblogs.com/yuanchenqi/articles/5732581.html
-
laravel 打印完整sql
DB::connection()->enableQueryLog(); // 开启QueryLog \App\User::find(1); dump(DB::getQueryLog());
-
TCP服务端开发为例--web开发不同url请求为何会走不同方法
拿java的web开发为例子,相信有很多小伙伴是做j2EE开发的,htpp请求,json数据传输都是工作中经常用的,查询请求,添加请求,修改请求前端配个url,例如https://localhost/ ...
-
BZOJ5338 [TJOI2018] Xor 【可持久化Trie树】【dfs序】
题目分析: 很无聊的一道题目.首先区间内单点对应异或值的询问容易想到trie树.由于题目在树上进行,case1将路径分成两段,然后dfs的时候顺便可持久化trie树做询问.case2维护dfs序,对d ...