`
淘气天空lc
  • 浏览: 47932 次
  • 性别: 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 本地接口规范

    在JDK1.0时代,本地接口(Native Interface)的设计较为初级,主要面向C语言结构,这使得Java在跨平台移植时遇到了挑战。原生的Java类型与本地数据类型的映射并不直观,导致了Java与本地代码交互时的复杂性。此外,...

    国开电大 Java语言程序设计 形考任务1-2答案.pdf

    7. **浮点类型限制**:Java中的浮点类型包括`float`和`double`,声明`float f=5.2`是错误的,因为5.2是一个双精度浮点数,需要强制类型转换才能赋值给`float`。 8. **变量交换**:在Java中,交换两个变量的值通常...

    Java多线程设计模式_清晰完整PDF版 Java多线程设计模式源代码

    Java中双检锁/双重检查锁定(Double-Check Locking,DCL)和静态内部类是实现线程安全单例的常用方法。 5. 状态对象模式:用于在多线程中同步访问对象的状态,例如CountDownLatch、CyclicBarrier和Semaphore等并发...

    JAVA程序设计习题库及答案(非常全面)

    ### JAVA程序设计习题库及答案(非常全面) #### 第一章 Java语言概论 **一、选择题解析** 1. **题目:** 下列不属于java语言鲁棒性特点的是: - A. java能检查程序在变异和运行时的错误 - B. java能运行虚拟机...

    Java课程设计聊天室

    - **Socket**:Java中的网络编程接口,用于建立客户端和服务器间的连接。 - **Eclipse**:强大的Java开发环境,提供便捷的代码编写和调试功能。 - **TCP/IP**:网络通信的基础协议,保证数据的可靠传输。 这个课程...

    java 课程设计双语复习题

    本文将深入探讨在Java课程设计中涉及的一些核心概念,特别是与继承、数组、异常处理和图形用户界面(GUI)相关的知识点。 首先,我们关注的是继承。在Java中,继承允许一个类(子类或派生类)从另一个类(超类或...

    实战Java高并发程序设计(高清版)

    3. **并发设计模式**:书里可能讨论了如何使用各种并发设计模式来解决并发问题,比如生产者消费者模型、双检锁(DCL)、读写锁(ReentrantReadWriteLock)等。 4. **并发工具类**:Java并发包(java.util....

    Java网络程序设计

    Thread类和Runnable接口是Java中实现多线程的基础,而ExecutorService和Future接口提供了更高级别的线程管理功能。 4. **I/O流**:Java的I/O流系统对于网络数据的读写至关重要。InputStream和OutputStream是处理...

    JAVA模拟QQ在线聊天源码下载毕业设计

    【JAVA模拟QQ在线聊天源码下载毕业设计】这个项目是一个基于Java编程语言实现的QQ聊天应用的模拟系统,主要用于帮助学生进行毕业设计实践。在这个项目中,你可以学习到如何运用Java技术来构建一个实时的、多用户交互...

    JAVA聊天程序设计代码及报告

    【JAVA聊天程序设计】 在Java编程领域,设计聊天程序是一项常见的练习,旨在加深对网络通信、多线程、GUI设计等技术的理解。本程序利用Java的特性,构建了一个简单的聊天应用,涵盖了网络通信基础、图形用户界面...

    Java网络程序设计 (PDF)

    Java网络程序设计是一门深入探讨如何使用Java语言开发网络应用程序的学科。这门技术涵盖了从基本的TCP/IP通信到高级的Web服务和分布式系统。在Java中,网络编程主要依赖于Java的Socket API和其他相关类库,这些工具...

    Java语言程序设计-进阶篇(原书第10版 中英文)

    《Java语言程序设计-进阶篇》是Java编程领域的一本经典教材,其原书第10版提供了中英文双语版本,对于学习者来说,无论是深入理解Java语言的精髓,还是提升跨文化交流能力,都是不可多得的资源。本教材主要针对已经...

    Java聊天室毕业设计完整版+数据库

    Java聊天室毕业设计是一个典型的项目案例,用于展示Java编程在实时通信系统中的应用。这个项目不仅涵盖了编程语言的基础,还涉及到了网络编程、多线程、数据库交互等多个关键知识点。以下将详细介绍这些方面: 1. *...

    java程序设计课后答案

    这些方法遵循了Java中的封装原则,即隐藏数据的内部实现并提供公共接口来访问这些数据。 接着是`Employee`类,它表示员工。`Employee`类包含三个私有成员变量:`name`、`salary`和`hireDay`,分别代表员工姓名、...

    Java常用设计模式

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的模板或最佳实践。这些模式在Java编程中被广泛运用,能够提高代码的可读性、可维护性和可扩展性。以下是关于标题和描述中提到的Java常用设计...

    Java并发编程:设计原则与模式(第二版)-3

    3. **并发设计模式**:书中详细介绍了各种并发设计模式,如生产者消费者模型(BlockingQueue)、读写锁模式(ReadWriteLock)、双检查锁定模式(Double-Checked Locking)、线程池模式(ThreadPoolExecutor)等,...

    Java程序设计与数据结构第九章习题答案

    在Java程序设计与数据结构的学习过程中,第九章通常会涵盖数据结构的重要概念和应用,包括数组、链表、栈、队列、树等基础数据结构,以及如何利用这些数据结构来解决问题。本资源提供了第九章的习题答案,旨在帮助...

    Java语言程序设计教程电子教案

    Java语言程序设计教程是针对初学者的一套详细教学资源,旨在帮助他们掌握Java编程的基础知识和进阶技能。Java作为一种广泛应用于互联网、企业级应用、移动开发等领域的面向对象编程语言,具有平台无关性、安全性和...

Global site tag (gtag.js) - Google Analytics