在备忘录模式中,需要设计一个宽接口(对某个某个特殊对象SpecialObject提供的接口),而窄接口对所有对象(OtherObject)提供的接口。怎样才能满足这样的需求呢?这种情况应该把宽接口设计成SpecialObject的内部类,但是有个问题就是这个类的接口方法不能被其他对象调用,需要做的就是把这个内部类的所有方法设置为private,那么怎样暴露一个窄接口给外部呢? 有个最窄的接口就是标记接口(类似Cloneable接口)只起一个标记左右,里面没有任何方法的申明。可以让这个内部实现标记接口,然后通过这个接口发布出去。这样就实现了这个需求。下面用双接口模式实现备忘录模式
备忘录模式:
备忘录模式的结构
- 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。
- 备忘录:负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。
- 管理角色:对备忘录进行管理,保存和提供备忘录。
- 我们只希望对发起人提供宽接口,而不希望对管理角色提供宽接口,管理角色不应该有权限改变备忘录,它只负责存储备忘录。因此需要给管理角色提供一个窄接口的备忘录。 代码实现
-
package com.memo.pattern; /** * 一个标记接口 * @author luochao * */ public interface NarrowInterface { }
-
package com.memo.pattern; import java.io.Closeable; public class SpecialObject { //发起人状态 private String state; public SpecialObject(){ } public NarrowInterface createNarrow(){ return new Memo(this.state); } public void RestoreState(NarrowInterface memo){ Memo memoto = (Memo)memo; this.setState(memoto.getSaveState()); } //备忘录对象 class Memo implements NarrowInterface{ private String saveState; //private construct method private Memo(String saveState) { this.saveState = saveState; } public String getSaveState() { return saveState; } public void setSaveState(String saveState) { this.saveState = saveState; } } public String getState() { return state; } public void setState(String state) { this.state = state; } }
package com.memo.pattern; public class Other { private NarrowInterface memo; public NarrowInterface getMemo() { return memo; } public void saveMemo(NarrowInterface memo) { this.memo = memo; } }
package com.memo.pattern; public class Client { private static SpecialObject o = new SpecialObject(); private static Other other = new Other(); public static void main(String[] args) { o.setState("off"); //管理者保存备忘录对象 other.saveMemo(o.createNarrow()); o.setState("on"); //从管理者对象中取出之前存档的备忘录用来恢复状态 o.RestoreState(other.getMemo()); } }
相关推荐
基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...
在本系统实现过程中,综合处理了多态 、接口–interface 、final关键字、继承等问题,开发技术上包括资源包的导入、图片流等,具体包括问题分析、方案设计、系统实现等多个方面,通过对Java基本原理的分析,重点解决...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
第一章程序和程序设计 .......................................................................................................1 §1.1 什么是程序 ?........................................................
使用Java、stripes,实现编号、布点等核心算法与服务器端MVC结构、后台与前台的数据交互接口;通过HTML、CSS、JavaScript、Ajax等技术,完善系统前台用户界面及绘图等功能,最终完成整个整个系统的设计与开发。 详细...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
在这里假设汽车不能从便道上开走,试设计这样一个停车厂模拟管理程序。 [概要设计] 1.定义Stack接口 2.设计停车场堆栈ParkStack 3.定义Queue接口 4.设计等待队列WaitQueue 5.定义结点类Node 6.搭建管理界面
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
SpringBoot112基于Spring Boot技术的卓越导师双选系统设计与实现是一个使用Java语言和Spring Boot框架开发的项目。该项目旨在提供一个简单、高效且易于使用的导师-学生双向选择系统,以帮助教育机构或组织更好地管理...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
本次实验采用 java语言设计一个基于C/S模式的TCP网络通讯程序。实现客户端与服务器端之间的数据 传输。 关键词:TCP/IP 网络通信 java C/S(client/server)模式 1引言 计算机网络通信是以计算机为信息接收终端,融合...
《java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 13. 编写代码实现一个Demo类,该类继承于Thread类,该类包括三个私有类方法,字符串类型...
本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题包括高速性能、双缓冲图像、动画、声音、媒体控制、I/O和网络支持等。将带领大家一步一步学习编写Java游戏,最终打造属于自己的Java游戏。 目录...
Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...
" "通过这次设计,要求掌握以下内容: " "面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 " "类、包、接口的定义与使用 " "常用工具类与算法的实现(数组、向量、字符串、链表) " "Java常用标准...
在 这 次 会 上 ,Java的 创 始 人 之 一 James Gosling 说 :"Java 不仅 仅只 是 applets, 它 能 做任 何 事 情 ",Dta 咨 询 公 司 的 高 级软 件 工 程 师 Rich Kadel说 :"Java 不仅 仅 是 一 种 程 序 设计 语言 ,...
Dubbo服务接口的设计原则(实战经验) Dubbo设计原理及源码分析 基于Dubbo构建大型分布式电商平台实战雏形 Dubbo容错机制及扩展性分析 分布式解决方案 分布式全局ID生成方案 session跨域共享及企业级单点登录...