Java 使用中介者模式/计算机存储系统

中介者模式

用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互

中介者模式的结构
在这里插入图片描述

  • 中介者(Mediator)//一个接口,定义了用于同事(Colleague)对象之间进行通信的方法
  • 具体中介者(ConcreteMediator)//实现了中介者接口的类
  • 同事(Colleague)//一个接口,实现了具体同事需要实现的方法
  • 具体同事(ConcreteColleague)//实现了同事接口的类

通过复制粘贴的例子

首先创建具体同事

import javax.swing.*;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

public class Application extends JFrame {
    ConcreteMediator concreteMediator;  //具体中介者
    JMenuBar jMenuBar;
    JMenu jMenu;
    JMenuItem jMenuItemCopy,jMenuItemPaste,jMenuItemCut;//复制粘贴剪切
    JTextArea jTextArea;
    Application(){
        setTitle("中介者模式");
        setBounds(300,300,400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        init();
        validate();
    }
    void init(){
        concreteMediator = new ConcreteMediator();  //中介者实例化
        jMenuBar = new JMenuBar();
        jMenu = new JMenu("编辑");
        jMenu.addMenuListener(new MenuListener() {
            @Override
            public void menuSelected(MenuEvent menuEvent) { //菜单被选择时让中介者执行一个方法
                concreteMediator.openMenu();
            }
            @Override
            public void menuDeselected(MenuEvent menuEvent) {
            }
            @Override
            public void menuCanceled(MenuEvent menuEvent) {
            }
        });
        jMenuItemCopy = new JMenuItem("复制");
        jMenuItemCopy.addActionListener(new ActionListener() {  //添加监视器
            @Override
            public void actionPerformed(ActionEvent actionEvent) {//让中介者调用方法
                concreteMediator.copy();
            }
        });
        jMenuItemCut = new JMenuItem("剪切");
        jMenuItemCut.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                concreteMediator.cut();
            }
        });
        jMenuItemPaste = new JMenuItem("粘贴");
        jMenuItemPaste.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                concreteMediator.paste();
            }
        });
        //jMenuItemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));//添加快捷键
        jMenu.add(jMenuItemCopy);
        jMenu.add(jMenuItemCut);
        jMenu.add(jMenuItemPaste);
        jMenuBar.add(jMenu);
        setJMenuBar(jMenuBar);//添加菜单条
        jTextArea = new JTextArea();
        add(jTextArea,BorderLayout.CENTER);//设置在中心
        set();
    }
    private void set(){ //私有的方法只能
        concreteMediator.setJMenu(jMenu);
        concreteMediator.setJMenuItemCopy(jMenuItemCopy);
        concreteMediator.setJMenuItemPaste(jMenuItemPaste);
        concreteMediator.setJMenuItemCut(jMenuItemCut);
        concreteMediator.setJTextArea(jTextArea);
    }
    public static void main(String[] args) {
        Application application = new Application();
    }
}

然后创建中介者

import javax.swing.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;

public class ConcreteMediator { //具体中介者
    JMenu jMenu;
    JMenuItem jMenuItemCopy,jMenuItemPaste,jMenuItemCut;
    JTextArea jTextArea;
    public void openMenu(){
        Clipboard clipboard = jTextArea.getToolkit().getSystemClipboard();//获取系统剪切板内容
        String str = jTextArea.getSelectedText();   //获取文本去的内容
        if(str == null){	//当没有选中文本的时候
            jMenuItemCopy.setEnabled(false);
            jMenuItemCut.setEnabled(false);
        }
        else{
            jMenuItemCopy.setEnabled(true);
            jMenuItemCut.setEnabled(true);
        }
        boolean boo = clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor);//是否为文本类型
        if (boo){
           jMenuItemPaste.setEnabled(true);
        }
    }
    public void paste(){
        jTextArea.paste();
    }
    public void copy(){
        jTextArea.copy();
    }
    public void cut(){
        jTextArea.cut();
    }
    public void setJMenu(JMenu jMenu) {
        this.jMenu = jMenu;
    }
    public void setJMenuItemCopy(JMenuItem jMenuItemCopy) {
        this.jMenuItemCopy = jMenuItemCopy;
    }

    public void setJMenuItemCut(JMenuItem jMenuItemCut) {
        this.jMenuItemCut = jMenuItemCut;
    }

    public void setJMenuItemPaste(JMenuItem jMenuItemPaste) {
        this.jMenuItemPaste = jMenuItemPaste;
    }

    public void setJTextArea(JTextArea jTextArea) {
        this.jTextArea = jTextArea;
    }
}

运行效果图
在这里插入图片描述
总结

  1. 掌握将其他组件嵌套到JFrame窗体中的方法
  2. 掌握各种组件的特点和使用方法
  3. 重点掌握组件的事件处理,Java处理事件的模式是事件源,监视器,处理事件的接口(三大金刚)

存储系统

高速缓存

高速缓冲存储器(Cache)//位于CPU和主存储器之间

  • 容量小速度快
  • 对程序员来说是透明的
  • 由控制部分和存储器部分组成

外存储器
外存储器容量较大,是用来存放暂时不用的程序和数据

  • 磁盘存储器
  • 硬盘
  • 光盘存储器
  • USB移动硬盘和USB闪存盘

CSS

CSS 水平对齐
CSS 尺寸 (Dimension)
CSS 分类 (Classification)

JavaScript

JavaScript 函数定义
JavaScript 函数参数
JavaScript 函数调用

CET4P168

instead
drawer
eagle
shell
simplify
corporation
quote
figure
vast
vary
depress

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值