设计模式学习总结(六)原型模式(Prototype)
原型模式即通过对象拷贝的方式来实现对同类对象的生成的一种设计模式!
浅复制:对于值类型,则直接复制该值,对于引用类型的字段则是对其引用的复制,如果原引用与现引用只要有一个的值发生变化,则都会造成两者值的变化。
深复制:对于值类型,则直接复制该值,对于引用类型的字段则复制其引用的对象,如果有多个/级嵌套引用,则复制所有引用的对象。
一、示例展示:
通过学习及总结,以下是我完成的原型模式的示例:
1. 创建抽象原型类:HandphonePrototype
public abstract class HandphonePrototype
{
private string cpu;
private string keyboard;
private string screen; public HandphonePrototype(string cpu,string keyboard,string screen)
{
this.cpu = cpu;
this.keyboard = keyboard;
this.screen = screen;
} public string CPU
{
get
{
return cpu;
}
} public string KEYBOARD
{
get
{
return keyboard;
}
} public string SCREEN
{
get
{
return screen;
}
}
abstract public HandphonePrototype Clone();
}
2. 创建具体原型类:AppleHandphonePrototype
public class AppleHandphonePrototype : HandphonePrototype
{
public AppleHandphonePrototype(string cpu, string keyboard, string screen) : base ( cpu,keyboard,screen ) { }
public override HandphonePrototype Clone()
{
//Shallow copy
return (HandphonePrototype)this.MemberwiseClone();
}
}
3. 客户端调用:
class Program
{
static void Main(string[] args)
{
AppleHandphonePrototype cp1 = new AppleHandphonePrototype("","","Very wounderful!");
AppleHandphonePrototype str = (AppleHandphonePrototype)cp1.Clone();
Console.WriteLine(str.CPU);
Console.WriteLine(str.KEYBOARD);
Console.WriteLine(str.SCREEN);
Console.ReadLine();
}
}
以上示例实现的是一个浅拷贝,如果希望实现一个深拷贝,则需要实现ICloneable接口并编写自己的Clone()方法;
二、原型模式设计理念:
以被拷贝对象作为原型,通过实现抽象原型类中的clone()方法在客户端进行对象的拷贝。主要通过浅拷贝(MemberwiseClone)和深拷贝(实现ICloneable接口并编写自己的克隆方法)来实现对对象引用和引用的对象的拷贝。
三、角色及关系:

设计模式学习总结(六)原型模式(Prototype)的更多相关文章
- 设计模式学习系列6 原型模式(prototype)
原型模式(prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.允许一个对象再创建另外一个新对象的时候根本无需知道任何创建细节,只需要请求圆形对象的copy函数皆可. 1 ...
- 设计模式(四)原型模式Prototype(创建型)
设计模式(四)原型模式Prototype(创建型) 1. 概述 我们都知道,创建型模式一般是用来创建一个新的对象,然后我们使用这个对象完成一些对象的操作,我们通过原型模式可以快速的创建一个对象 ...
- 跟着实例学习设计模式(7)-原型模式prototype(创建型)
原型模式是创建型模式. 设计意图:用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象. 我们使用构建简历的样例的类图来说明原型模式. 类图: 原型模式主要用于对象的复制.它的核心是就是类图 ...
- 设计模式(五)原型模式 Prototype
原型模式: 原型模式,是指基于一个已经给定的对象,通过拷贝的方式,创建一个新的对象,这个给定对象,就是“原型”. 在 Java 中,原型模式体现为 Object 的 clone() 方法. 所有类都可 ...
- 小菜学习设计模式(四)—原型(Prototype)模式
前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...
- Net设计模式实例之原型模式( Prototype Pattern)
一.原型模式简介(Brief Introduction) 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. Specify the kin ...
- 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)
原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...
- Java设计模式(4)原型模式(Prototype模式)
Prototype模式定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是: ...
- PHP设计模式 原型模式(Prototype)
定义 和工厂模式类似,用来创建对象.但实现机制不同,原型模式是先创建一个对象,采用clone的方式进行新对象的创建. 场景 大对象的创建. 优点 1.可以在运行时刻增加和删除产品 2.可以改变值或结构 ...
- 设计模式系列之原型模式(Prototype Pattern)——对象的克隆
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
随机推荐
- Java 之集合框架
- Log--检查各数据库日志的使用情况
-- Recovery model, log reuse wait description, log file size,-- log usage size and compatibility lev ...
- TSQL--SET ANSI_NULLS OFF
当ANSI_NULLS 为ON时,遵循SQL92的标准,只能使用IS NULL 来判断值是否为NULL, 而不能使用=或<>来与NULL做比较,任何值包括NULL值与NULL值做=或< ...
- MVC ASP.NET MVC各个版本的区别
ASP.NET MVC各个版本的区别 Net Framework4.5是不支持安装在window server 2003上,如非装请用net framework4.0; MVC1.0 publsh t ...
- vs2015+opencv3.3.1+ maxflow-v3.01 c++实现Yuri Boykov 的Interactive Graph Cuts
出的结果不理想. 感觉是tlink的权重的计算有问题,以及参数的设置.三个可设置参数是后面的 i j k .如果你找到了一组好参数请告诉我. 下载地址 http://download.csdn.ne ...
- 《C#多线程编程实战》2.3 Mutex
这个真的是大坑. 如果深入研究,像是同步域,上下文这类都会出现. 但是书上有没有讲. 完全不知道什么意思. 勉勉强强讲这个Mutex的用法搞明白了. 这个是原书代码: class Program { ...
- Mysql初识数据库《一》下载安装Mysql
#1.下载:MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ #2.解压 如果想要让MySQL安装在指定目录,那么 ...
- 洛谷P2774 方格取数问题(最小割)
传送门 考虑一下,答案就是全局和减去舍弃和 不难发现,如果我们按行数+列数的奇偶性分为两类,那么每一类中的数必然互不相邻 那么我们把原图的点分为黑点和白点两类,原地向白点连边,黑点向汇点连边,容量为点 ...
- django 部署到Ubuntu-apache2遇到的问题汇总
1.x86_64-linux-gnu-gcc: error: unrecognized command line option ‘-fstack-protector-strong’ Turns out ...
- 前端CSS的基本素养
前端开发的三驾马车——html.css.js,先谈谈CSS CSS 前期:解决布局.特效.兼容问题 中级:网站风格的制定.色调.模块.布局方式.交互方式.逻辑设计等 高级:模块命名.类的命名.文件的组 ...