`
淘气天空lc
  • 浏览: 46654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java双接口设计

    博客分类:
  • java
阅读更多

         在备忘录模式中,需要设计一个宽接口(对某个某个特殊对象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实验6多线程.doc

    基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...

    基于Java的飞机大战游戏系统

    在本系统实现过程中,综合处理了多态 、接口–interface 、final关键字、继承等问题,开发技术上包括资源包的导入、图片流等,具体包括问题分析、方案设计、系统实现等多个方面,通过对Java基本原理的分析,重点解决...

    java源码包---java 源码 大量 实例

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA程序设计教程

    第一章程序和程序设计 .......................................................................................................1 §1.1 什么是程序 ?........................................................

    基于Java的双代号网络图自动绘制系统研究与实现.zip

    使用Java、stripes,实现编号、布点等核心算法与服务器端MVC结构、后台与前台的数据交互接口;通过HTML、CSS、JavaScript、Ajax等技术,完善系统前台用户界面及绘图等功能,最终完成整个整个系统的设计与开发。 详细...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java 停车厂模拟管理程序的设计与实现

    在这里假设汽车不能从便道上开走,试设计这样一个停车厂模拟管理程序。 [概要设计] 1.定义Stack接口 2.设计停车场堆栈ParkStack 3.定义Queue接口 4.设计等待队列WaitQueue 5.定义结点类Node 6.搭建管理界面

    java源码包4

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java源码包3

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA毕业设计之springboot112基于Spring Boot技术的卓越导师双选系统设计与实现源代码.zip

    SpringBoot112基于Spring Boot技术的卓越导师双选系统设计与实现是一个使用Java语言和Spring Boot框架开发的项目。该项目旨在提供一个简单、高效且易于使用的导师-学生双向选择系统,以帮助教育机构或组织更好地管理...

    java源码包2

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java网络编程技术课程设计.doc

    本次实验采用 java语言设计一个基于C/S模式的TCP网络通讯程序。实现客户端与服务器端之间的数据 传输。 关键词:TCP/IP 网络通信 java C/S(client/server)模式 1引言 计算机网络通信是以计算机为信息接收终端,融合...

    java程序设计程序题16道

    《java程序设计》课程的题库资料,由贺州学院整理,可供学生期末课程复习使用,也可以供相关任课教师出卷使用。 内容示例为: 13. 编写代码实现一个Demo类,该类继承于Thread类,该类包括三个私有类方法,字符串类型...

    Java2游戏编程.pdf

    本书将向读者展示用Java语言和它的类库创建2D游戏,所涉及的主题包括高速性能、双缓冲图像、动画、声音、媒体控制、I/O和网络支持等。将带领大家一步一步学习编写Java游戏,最终打造属于自己的Java游戏。 目录...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    JAVA课程设计(1).doc

    " "通过这次设计,要求掌握以下内容: " "面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 " "类、包、接口的定义与使用 " "常用工具类与算法的实现(数组、向量、字符串、链表) " "Java常用标准...

    java基础入门教程

    在 这 次 会 上 ,Java的 创 始 人 之 一 James Gosling 说 :"Java 不仅 仅只 是 applets, 它 能 做任 何 事 情 ",Dta 咨 询 公 司 的 高 级软 件 工 程 师 Rich Kadel说 :"Java 不仅 仅 是 一 种 程 序 设计 语言 ,...

    Java思维导图xmind文件+导出图片

    Dubbo服务接口的设计原则(实战经验) Dubbo设计原理及源码分析 基于Dubbo构建大型分布式电商平台实战雏形 Dubbo容错机制及扩展性分析 分布式解决方案 分布式全局ID生成方案 session跨域共享及企业级单点登录...

Global site tag (gtag.js) - Google Analytics