GoF23种设计模式之创建型模式之原型模式
一、概述
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
二、适用性
1.当一个系统应该独立于它的产品创建、构成和表示的时候。
2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载。
3.为了避免创建一个与产品类层次平行的工厂类层次的时候。
4.当一个类的实例只能有几个不同状态组合中的一种的时候。
建立相应数目的原型并克隆它们可能要比每次用合适的状态手工实例化该类更方便一些。
三、参与者
1.Prototype:声明一个克隆自身的接口。
2.ConcretePrototype:实现一个克隆自身的操作。
3.Client:让一个原型克隆自身从而创建一个新的对象。
四、类图
五、示例
Prototype
- package cn.lynn.prototype;
- public class Snake implements Cloneable {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Object clone() {
- try {
- return super.clone();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- }
ConcretePrototype
- package cn.lynn.prototype;
- public class WhiteSnake extends Snake {
- public WhiteSnake(String name) {
- setName(name);
- }
- }
Client
- package cn.lynn.prototype;
- public class Client {
- public static void main(String[] args) {
- Snake snake1 = new WhiteSnake("我是白素贞");
- Snake snake2 = (Snake) snake1.clone();
- System.out.println(snake1.getName());
- System.out.println(snake2.getName());
- }
- }
Result
- 我是白素贞
- 我是白素贞
GoF23种设计模式之创建型模式之原型模式的更多相关文章
- GoF23种设计模式之创建型模式之工厂方法模式
一.概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类.工厂方法将一个类的实例化延迟至其子类. 二.适用性 1.当一个类不知道它所必须创建的对象的类的时候. 2.当一个类希望由其子类来指定它所 ...
- GoF23种设计模式之创建型模式之抽象工厂模式
一.概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.适用性 1.一个系统要独立于它的产品的创建.组合和表示的时候. 2.一个系统要由多个产品系列中的一个来配置的时候. ...
- GoF23种设计模式之创建型模式之建造者模式
一.概述 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示. 二.适用性 1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式的时候. 2.当构造过程必须允许 ...
- GoF23种设计模式之创建型模式之单态模式
1概述 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2适用性 1.当类只能有一个实例而且客户可以从一个总所周知的访问点访问它的时候. 2.当这个唯一实例应该是通过子类化可扩展的,并且客户应 ...
- GoF的23种设计模式之创建型模式的特点和分类
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”.这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成.就像我们去商场购买商品时, ...
- GoF23种设计模式之行为型模式之迭代器模式
一.概述 给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.二.适用性1.当访问一个聚合对象的内容而无需暴露它的内部表示的时候.2.当对聚合对象的多 ...
- GoF23种设计模式之行为型模式之状态模式
一.概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 二.适用性 1.一个对象的行为取决于它的状态,并且它必须在运行时刻 ...
- GoF23种设计模式之行为型模式之策略模式
传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 1概述 定义一系列算法,把它们一个个都封装起来,并且让它们可以相互 ...
- GoF23种设计模式之行为型模式之命令模式
一.概述 将一个请求封装为一个对象,从而可以使用不同的请求对客户端进行参数化.对请求排队或记录请求日志,以及支持撤销的操作. 二.适用性 1.当抽象出待执行的动作以参数化某个对象的时候. 2.当需要在 ...
随机推荐
- 【C#】=>符号的使用
Lambda表达式.Lambda表达式是C#3.0的新内容,如果您之前学习的C#2.0,不认识也就不奇怪了.给您举个例子.例如,我定义一个委托:delegate int Method(int a, i ...
- Windows安全认证是如何进行的?[Kerberos篇]
最近一段时间都在折腾安全(Security)方面的东西,比如Windows认证.非对称加密.数字证书.数字签名.TLS/SSL.WS-Security等.如果时间允许,我很乐意写一系列的文章与广大网友 ...
- Java继承改进
一.java继承改进 首先,多继承的缺点: 1.继承多个父类,父类中方法名相同,产生歧义 2.父类中方法同名,子类未覆盖,也会歧义 所以,java改进,类只能单继承,接口可以多继承 接口中只有抽象方法 ...
- <邮件的反垃圾反病毒>
本章——发送接收邮件的工具为雷鸟 安装 # yum install dovecot-mysql.x86_64 dovecot.x86_64 -y 编辑文件 vim 10-mail.conf mail_ ...
- Java实例学习——企业进销存管理系统(4)
Java实例学习——企业进销存管理系统(4) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月18日——系统主窗体设计 只看了学习视频 2月19日—— 回 ...
- DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2
数据绑定的用法 import语法 <data> <import type="android.view.view"/> </data> 如 ...
- AngularJS(九):路由
本文也同步发表在我的公众号“我的天空” AngularJS路由 AngularJS路由可以让我们通过不同的URL访问不同页面(似乎是废话),其价值主要体现在单页面的web应用中(single page ...
- NC57访问报错:java.sql.SQLException: Io 异常: Got minus one from a read call
一.报错信息 1. 前端登录界面 2. 后台应用日志 报错信息一致为: $$callid= $$thread=[Service Monitor and Runtime Enroment] $$ho ...
- zabbix-3.4-快速入门
1 登陆和配置用户 登陆Zabbix,以及在Zabbix内建立一个系统用户. 用户名:Admin 或者 admin 密码 : zabbix 增加用户 可以在 管理(Administration) → ...
- maven-整合到eclips
1.把maven的识别文件放到maven的安装路径下 2.在eclips中的properties中找到maven,勾选下载文档和下载源码的复选框以下载源码 3.创建maven项目 4.右键pom.xm ...