`

设计模式回顾之十三:原型模式(Prototype)

 
阅读更多

设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

原型模式(Prototype) 

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

 

适用于:

当要实例化的类是在运行时刻指定时,例如:通过动态装载,

或者为了避免创建一个与产品类层次平行的工厂类层次时,

或者当一个类的实例只能有几个不同状态组合中的一种时,

建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。

 

程序实现:

克隆接口:

public interface Prototype extends Cloneable{
    public Prototype clone() throws CloneNotSupportedException;
}

具体实现类:

public class ConcretePrototype implements Prototype{
	private String name;
	
	public ConcretePrototype(String name){
		this.name=name;
	}
	
	public Prototype clone() throws CloneNotSupportedException{
		return (Prototype)super.clone();
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

管理者:

public class PrototypeManager {
	private Prototype prototype;
	
	public void setPrototype(Prototype prototype){
		this.prototype=prototype;
	}
	
	public Prototype doClone() throws CloneNotSupportedException{
		return prototype.clone();
	}
}

客户端:

public static void main(String[] args) throws Exception{
		Prototype prototype = new ConcretePrototype("A ConcretePrototype!");
		PrototypeManager pm = new PrototypeManager();
		pm.setPrototype(prototype);
		ConcretePrototype cloneObj = (ConcretePrototype)pm.doClone();
		System.out.println(cloneObj.getName());
		System.out.println(cloneObj == prototype);
		System.out.println(cloneObj.equals(prototype));
}

关于潜复制和深复制:

潜复制:复制某对象中关联其它对象的引用。

深复制:将对象中关联的其它对象也复制一遍,复制后引用指向新复制后的对象。

 

举例:Jdk中的cloneable接口和clone方法。

 

分享到:
评论

相关推荐

    《设计模式:可复用面向对象软件的基础》英文版

    设计模式通常分为三类:创建型模式、结构型模式和行为型模式。 - **创建型模式**:关注对象的创建机制,使创建过程本身变得更为灵活。包括抽象工厂模式(Abstract Factory)、建造者模式(Builder)、工厂方法模式...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    在第25讲中,他集中对整个系列进行了一次全面的总结,让我们一起来回顾和探讨这些设计模式的核心要点。 设计模式是经过实践验证的、在特定场景下解决常见问题的最佳解决方案。它们是面向对象设计的智慧结晶,通过...

    C#设计模式.PDF

    在本章节中,作者可能会回顾面向对象编程的基本概念,如封装、继承、多态等,并为后面介绍的设计模式奠定理论基础。 ### 2. 设计模式举例 这部分内容将通过具体的例子来介绍设计模式的应用场景,帮助读者理解不同...

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    从最初接触GoF的经典之作《设计模式:可复用面向对象软件的基础》,到后来的实际应用和教学过程中,作者经历了从困惑不解到豁然开朗的过程。这段旅程不仅是技术上的提升,更是思维方式的转变。 #### 1. 创建型模式 ...

    侯捷2015设计模式课件-同济

    首先,设计模式课件回顾了面向对象编程(Object-Oriented Programming,OOP)的基本原则,如封装、继承和多态,这些是设计模式依赖的基础。 接下来,课程深入讨论了GoF的设计模式。这些模式可以分为三类: 1. 创建...

    C#设计模式大全

    在深入探讨设计模式之前,我们首先回顾C#中的面向对象特性: 1. **封装**:通过将数据和操作这些数据的方法封装在一个类中来实现。 2. **继承**:允许创建一个新的类继承现有类的属性和行为。 3. **多态**:同一个...

    设计模式精解-GoF23_种设计模式解析

    作者回顾了自己学习设计模式的心路历程,从初学时的困惑和挑战,到逐渐掌握并能够在实际项目中灵活运用这些模式,最终达到了能够向他人传授知识的境界。作者认为,学习设计模式不仅是为了掌握一项技能,更重要的是...

    11-回顾和总结(1).html

    在书中,作者们将这二十三种设计模式分成了三类,分别是创建型模式、结构型模式和行为型模式。 创建型模式包含了: 工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ...

    设计模式精解-GoF23种设计模式解析

    作者回顾了自己学习设计模式的过程,从最初的困惑和挑战到最终的领悟和应用,强调了实践的重要性。学习设计模式的过程不仅仅是理论上的理解,更是一种实践的过程,通过不断地实践才能真正掌握这些模式并将其应用于...

    追MM与23种设计模式

    原型模式是一种创建型设计模式,它使用已有的对象实例作为模板,通过复制这些实例来创建新的对象,而不是通过实例化对象的类来创建新对象。在“追MM”的过程中,如果发现了一种有效的追求方式,可以将其作为原型,...

    js设计模式简述

    随着项目的复杂度不断提高,合理运用设计模式成为提高代码质量和可维护性的关键手段之一。本文旨在为初学者提供一个简单的入门指南,通过解析几种常见的JavaScript设计模式,帮助读者理解和掌握其核心概念。 #### ...

    javascript 设计模式.docx

    #### 三、设计模式概述 接下来,我们将介绍几种常见的JavaScript设计模式,包括但不限于单例模式、工厂模式、观察者模式等。 ##### 3.1 单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问点。 **...

    算法导论 DesignPatterns Gof

    在最后一章中,作者们回顾了设计模式的发展历程,展望了未来可能的发展方向,并鼓励更多的软件工程师参与到模式社区中来。此外,书中还提供了一些基础类的定义和相关术语的解释,为读者提供了更全面的学习资源。 ...

    DesignPatterns:回顾在软件体系结构和设计课程中看到的设计模式

    设计模式是软件工程中的一种重要概念,它是在特定上下文中解决常见问题的模板或最佳实践。在Java开发中,设计模式的应用广泛且至关重要,因为它们能够提高代码的可读性、可维护性和可复用性。本篇文章将深入探讨在...

    Game Programming Patterns游戏编程模式

    1. **设计模式回顾**(Design Patterns Revisited):书中的设计模式部分介绍了一些经典的设计模式,如: - **命令模式**(Command):将请求封装为一个对象,使你可以参数化不同请求,支持撤销操作,并可以将请求...

Global site tag (gtag.js) - Google Analytics