中介者模式
用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的交互
中介者模式的结构
- 中介者(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;
}
}
运行效果图
总结
- 掌握将其他组件嵌套到JFrame窗体中的方法
- 掌握各种组件的特点和使用方法
- 重点掌握组件的事件处理,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