Builder(生成器)模式
Factory Method(工厂方法)模式
意图:用于创建对象的接口,同时控制对哪个类进行实例化。
Abstract Factory(抽象工厂)模式
意图:创建一系列相互关联或相互依赖的对象。
Prototype(原型)模式
prototype模式不通过实例化类来创建一个新的未初始化的实例,而是通过复制一个现有对象来生成新的对象。
浅拷贝
public class PackageInfo implements Cloneable {
private Long id;
private String receiverName;
private String receiverAddress;
private String senderName;
private String senderPhoneNo;
//other fields, getters, setters and other methods...
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getReceiverName() {
return receiverName;
}
public void setReceiverName(String receiverName) {
this.receiverName = receiverName;
}
public String getReceiverAddress() {
return receiverAddress;
}
public void setReceiverAddress(String receiverAddress) {
this.receiverAddress = receiverAddress;
}
public String getSenderName() {
return senderName;
}
public void setSenderName(String senderName) {
this.senderName = senderName;
}
public String getSenderPhoneNo() {
return senderPhoneNo;
}
public void setSenderPhoneNo(String senderPhoneNo) {
this.senderPhoneNo = senderPhoneNo;
}
public PackageInfo clone() {
try {
return (PackageInfo)super.clone();
} catch (CloneNotSupportedException e) {
System.out.println("Cloning not allowed.");
return null;
}
}
public static PackageInfo clonePackage(String userName) {
//load package as prototype data from db...
PackageInfo prototype = loadPackageInfo(userName);
//clone information...
prototype = prototype.clone();
//initialize copied data...
prototype.setId(null);
return prototype;
}
//Simulate loading data from database
private static PackageInfo loadPackageInfo(String userName) {
PackageInfo packageInfo = new PackageInfo();
//create a String object in jvm heap not jvm string pool
packageInfo.setId(100l);
packageInfo.setReceiverName("John");
packageInfo.setReceiverAddress("People Square,Shanghai");
packageInfo.setSenderName("William");
packageInfo.setSenderPhoneNo("12345678901");
return packageInfo;
}
}
public class PackageInfoTestDrive {
public static void main(String[] args) {
PackageInfo currentInfo = PackageInfo.clonePackage("John");
System.out.println("Original package information:");
display(currentInfo);
currentInfo.setId(10000l);
currentInfo.setReceiverName("Ryan");
currentInfo.setReceiverAddress("People Square, Shanghai");
System.out.println("\nNew package information:");
display(currentInfo);
}
private static void display(PackageInfo currentInfo) {
System.out.println("Package id: " + currentInfo.getId());
System.out.println("Receiver name: " + currentInfo.getReceiverName());
System.out.println("Receiver address: " + currentInfo.getReceiverAddress());
System.out.println("Sender name: " + currentInfo.getSenderName());
System.out.println("Sender Phone No.: " + currentInfo.getSenderPhoneNo());
}
}
深拷贝(Deep Copy)
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class DeepCopyBean implements Serializable {
private String objectField;
private int primitiveField;
public String getObjectField() {
return objectField;
}
public void setObjectField(String objectField) {
this.objectField = objectField;
}
public int getPrimitiveField() {
return primitiveField;
}
public void setPrimitiveField(int primitiveField) {
this.primitiveField = primitiveField;
}
public DeepCopyBean deepCopy() {
try {
ByteArrayOutputStream buf = new ByteArrayOutputStream();
ObjectOutputStream o = new ObjectOutputStream(buf);
o.writeObject(this);
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buf.toByteArray()));
return (DeepCopyBean) in.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
public class DeepCopyBeanTestDrive {
public static void main(String[] args) {
DeepCopyBean originalBean = new DeepCopyBean();
//create a String object in jvm heap not jvm string pool
originalBean.setObjectField(new String("123456"));
originalBean.setPrimitiveField(2);
//clone this bean
DeepCopyBean newBean = originalBean.deepCopy();
System.out.println("Primitive ==? " + (newBean.getPrimitiveField() == originalBean.getPrimitiveField()));
System.out.println("Object ==? " + (newBean.getObjectField() == originalBean.getObjectField()));
System.out.println("Object equal? " + (newBean.getObjectField().equals(originalBean.getObjectField())));
}
}
Memento(备忘录)模式
意图:为对象提供状态存储和状态恢复功能。

- 大小: 51 KB
分享到:
相关推荐
构造型模式关注对象的创建和组合,行为模式关注对象的行为和交互,结构型模式关注对象的结构和组织。 构造型模式 构造型模式解决对象的创建问题,包括简单工厂模式、工厂方法模式、抽象工厂模式、创建者模式、原型...
设计模式是软件开发中的一种...- **构造型模式**:包括生成器模式、工厂方法模式、抽象工厂模式,它们主要用于对象的创建和组装。 通过理解和掌握这些设计模式,开发者可以构建出更加健壮、灵活和易于维护的软件系统。
第14章 构造型模式介绍 130 第15章 构建者(builder)模式 134 第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163...
构造型 用于帮助将多个对象组织成更大的结构。如,适配器模式、桥接模式、组合器模式等。 行为型 用于帮助系统间对象的通信,以及如何控制复杂系统中的流程。如,命令模式、解释器模式、迭代器模式等。
享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...
【基于构造型神经网络的异常模式发现方法】 异常检测是数据分析中的重要环节,尤其是在数据流环境中,由于数据的实时性和连续性,异常检测对于及时识别潜在的问题和威胁至关重要。构造型神经网络(Constructive ...
这份文档详细介绍了23种设计模式,分为三大类:创立型模式、构造型模式和行为型模式。 1. **创立型模式**: - **工厂方法模式**:允许将对象的创建过程延迟到子类中,使得子类可以决定实例化哪个类的对象,提高了...
例如,可以从构造型模式的简单模式开始,如工厂模式,然后再逐步学习更复杂的模式。 在介绍工厂模式前,文档提到了两个预备知识:向上转型(Upcasting)和多态。向上转型是指将派生类对象当作其基类对象使用,这是...
- **构造型模式**:描述如何组合简单的元素形成复杂的系统结构,如组合模式、装饰模式。 - **包模式**:处理系统组件的分组和依赖关系,如模块化模式。 3. **UML模式的应用** - **需求分析**:用例图可以帮助...
2. **构造型模式**:关注对象的组合和结构,通过组合不同的对象形成新的对象。包括: - **适配器模式**:将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ...
**构造型模式**: 1. **适配器模式**:使两个不兼容的接口能够协同工作。它将一个类的接口转换成客户希望的另一个接口。 2. **桥接模式**:将抽象部分与实现部分分离,使它们可以独立变化。它是一种结构型的复合模式...
* 构造型模式与生成器模式:介绍设计模式的构造型模式和生成器模式,包括构造型模式的应用、生成器模式的应用等。 面向对象程序设计 * 类的定义与建立对象:介绍面向对象程序设计的基本概念和技术,包括类的定义、...
2. 构造型模式: - 适配器(Adapter):将不兼容的接口转换为客户期望的接口,使原本无法一起工作的类可以协同工作。 - 桥接(Bridge):将抽象部分与其实现部分分离,使它们可以独立变化。 - 组合(Composite)...
构造型模式: 工厂模式:隐藏构造细节通过new的方式构建对象,相当于调用者多知道了一个类,增加了类与类之间的联系。工厂模式就是用来封装构建过程的简单工厂模式,承担了构建所有对象的职责,变成了超级类。每一...
【基于仿生模式识别的构造型神经网络分类方法】是一种创新的神经网络构造技术,它借鉴了生物界中同类事物的渐变模式理论,应用于神经网络的构建与分类任务。该理论认为,即使同类事物之间存在微小差异,它们依然共享...
《基于仿生模式识别的构造型神经网络分类方法分析》 本文主要探讨了一种创新的神经网络构造策略,该策略借鉴了仿生模式识别理论,旨在优化神经网络的分类性能。仿生模式识别理论认为,同类但不完全相同的事物之间...
设计模式是构造型模式、结构型模式、行为型模式等。框架是另一种研究和构造软件体系结构的方法,更多的是关于应用领域问题的已建立的系统结构。 计算机硬件体系结构分类包括SISD单指令流单数据流计算机、SIMD单指令...