- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java3种模式带例子
中间件技术原理与应用课程
Java设计模式
目录
1. 设计模式 2
1.1 创建型模式 2
1.1.1 原型模式 2
1.2 结构型模式 4
1.2.1 组合模式 5
1.3 行为型模式 9
1.3.1 备忘录模式 11
1. 设计模式
1.1 创建型模式
AbstractFactory ( 抽象工厂 )
FactoryMethod ( 工厂方法 )
Singleton ( 单态模式 )
Builder ( 建造者模式 )
Protot*pe * 原型模式 )
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
?适用性
1.当一个系统应该独立于它的产品创*、构成和表示时。
2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。
3.为了避免创建一个与产品类层次平行的工厂*层次时。
4.当一个类的实例只能有几个不同状态组合中的一种时。
建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
?参与者
1. Prototype
声明一个克隆自身的接口。
2. ConcretePrototype
实现一个克隆自身的操作。
3. Client
让一个原型克*自身从而创建一个新的对象。
?类图
?例子
Prototype
public class Prototype implements Cloneable {
private String name;
public void setName(String name) {
= name;
}
public String getName() {
return ;
}
public Object clone(){
try {
return super.clone();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
ConcretePrototype
publ*c class ConcretePrototype extend* Prototype {
public ConcretePrototype(String name) {
setName(name);
}
}
Client
public clas* Test {
public static void main(String[] args) {
Prototype pro = new ConcretePrototy*e(prototype);
Prototype pro2 = (Prototype)pro.clone();
*ystem.out.println(pro.getName()*;
System.out.println(pro2.getName());
}
}
result
prototype
prototype
小结:
原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
例如: (1)QQ 聊天,别人向我们打招呼,我们点个托管,设置对面内容,然后就自动回复了。(2)设立原始尺寸,然后就可以根据原型复制更多的出来,代码如下:
totype;
//原型
interfacePrototype {
voidsetSize(intx);
voidprintSize();
}
// 一个具体类
classAimplementsPrototype, Cloneable {
privateintsize;
publicA(intx) {
this.size = x;
}
@Override
publicvoidsetSize(intx) {
this.size = x;
}
@Override
publicvoidprintSize() {
System.out.println(
文档评论(0)