亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? u_command.java

?? 超好的設計模式Java事例程序
?? JAVA
字號:
/*
COMMAND—俺有一個MM家里管得特別嚴,沒法見面,只好借助于她弟弟在我們倆之間傳送信息,她對我有什么指示,就寫一張紙條讓她弟弟帶給我。這不,她弟弟又傳送過來一個COMMAND,為了感謝他,我請他吃了碗雜醬面,哪知道他說:“我同時給我姐姐三個男朋友送COMMAND,就數你最小氣,才請我吃面。”, 

  命令模式:命令模式把一個請求或者操作封裝到一個對象中。命令模式把發出命令的責任和執行命令的責任分割開,委派給不同的對象。命令模式允許請求的一方和發送的一方獨立開來,使得請求的一方不必知道接收請求的一方的接口,更不必知道請求是怎么被接收,以及操作是否執行,何時被執行以及是怎么被執行的。系統支持命令的撤消。
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class U_Command extends JFrame implements ActionListener, MouseMotionListener, WindowListener {
    // 繪制記錄
    private MacroCommand history = new MacroCommand();
    // 繪制區域
    private DrawCanvas canvas = new DrawCanvas(400, 400, history);
    // 刪除鍵
    private JButton clearButton  = new JButton("clear");

    // 構造子
    public U_Command(String title) {
        super(title);

        this.addWindowListener(this);
        canvas.addMouseMotionListener(this);
        clearButton.addActionListener(this);

        Box buttonBox = new Box(BoxLayout.X_AXIS);
        buttonBox.add(clearButton);
        Box mainBox = new Box(BoxLayout.Y_AXIS);
        mainBox.add(buttonBox);
        mainBox.add(canvas);
        getContentPane().add(mainBox);

        pack();
        setVisible(true);
    }

    // ActionListener用
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == clearButton) {
            history.clear();
            canvas.repaint();
        }
    }

    // MouseMotionListener用
    public void mouseMoved(MouseEvent e) {
    }
    public void mouseDragged(MouseEvent e) {
        Command cmd = new DrawCommand(canvas, e.getPoint());
        history.append(cmd);
        cmd.execute();
    }

    // WindowListener用
    public void windowClosing(WindowEvent e) {
        System.exit(0);
    }
    public void windowActivated(WindowEvent e) {}
    public void windowClosed(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowIconified(WindowEvent e) {}
    public void windowOpened(WindowEvent e) {}

    public static void main(String[] args) {
        new U_Command("Command Pattern Sample");
    }
}
interface Command {
    public abstract void execute();
}
class MacroCommand implements Command {
    // 命令的集合
    private Stack commands = new Stack();
    // 執行
    public void execute() {
        Iterator it = commands.iterator();
        while (it.hasNext()) {
            ((Command)it.next()).execute();
        }
    }
    // 新增
    public void append(Command cmd) {
        if (cmd != this) {
            commands.push(cmd);
        }
    }
    // 刪除最后一個命令
    public void undo() {
        if (!commands.empty()) {
            commands.pop();
        }
    }
    // 全部刪除
    public void clear() {
        commands.clear();
    }
}

interface Drawable {
    public abstract void draw(int x, int y);
}

class DrawCanvas extends Canvas implements Drawable {
    // 繪制色彩
    private Color color = Color.red;
    // 繪制點的半徑
    private int radius = 6;
    // 記錄
    private MacroCommand history;
    // 構造子
    public DrawCanvas(int width, int height, MacroCommand history) {
        setSize(width, height);
        setBackground(Color.white);
        this.history = history;
    }
    // 再度繪制整個記錄
    public void paint(Graphics g) {
        history.execute();
    }
    // 繪制
    public void draw(int x, int y) {
        Graphics g = getGraphics();
        g.setColor(color);
        g.fillOval(x - radius, y - radius, radius * 2, radius * 2);
    }
}

class DrawCommand implements Command {
    // 繪制對象
    protected Drawable drawable;
    // 繪制位置
    private Point position;
    // 構造子
    public DrawCommand(Drawable drawable, Point position) {
        this.drawable = drawable;
        this.position = position;
    }
    // 執行
    public void execute() {
        drawable.draw(position.x, position.y);
    }
}


/*
Command定義
n 將來自客戶端的請求傳入一個對象,無需了解這個請求激活的 動作或有關接受這個請求的處理細節。

這是一種兩臺機器之間通訊聯系性質的模式,類似傳統過程語 言的 CallBack功能。 

優點:
解耦了發送者和接受者之間聯系。 發送者調用一個操作,接受者接受請求執行相應的動作,因為使用Command模式解耦,發送者無需知道接受者任何接口。

不少Command模式的代碼都是針對圖形界面的,它實際就是菜單命令,我們在一個下拉菜單選擇一個命令時,然后會執行一些動作.

將這些命令封裝成在一個類中,然后用戶(調用者)再對這個類進行操作,這就是Command模式,換句話說,本來用戶(調用者)是直接調用這些命令的,如菜單上打開文檔(調用者),就直接指向打開文檔的代碼,使用Command模式,就是在這兩者之間增加一個中間者,將這種直接關系拗斷,同時兩者之間都隔離,基本沒有關系了.

顯然這樣做的好處是符合封裝的特性,降低耦合度,Command是將對行為進行封裝的典型模式,Factory是將創建進行封裝的模式,
從Command模式,我也發現設計模式一個"通病":好象喜歡將簡單的問題復雜化, 喜歡在不同類中增加第三者,當然這樣做有利于代碼的健壯性 可維護性 還有復用性.

如何使用?
具體的Command模式代碼各式各樣,因為如何封裝命令,不同系統,有不同的做法.下面事例是將命令封裝在一個Collection的List中,任何對象一旦加入List中,實際上裝入了一個封閉的黑盒中,對象的特性消失了,只有取出時,才有可能模糊的分辨出:

典型的Command模式需要有一個接口.接口中有一個統一的方法,這就是"將命令/請求封裝為對象":
public interface Command {
  public abstract void execute ( );
} 

具體不同命令/請求代碼是實現接口Command,下面有三個具體命令
public class Engineer implements Command {

  public void execute( ) {
    //do Engineer's command
  }
} 
public class Programmer implements Command {

  public void execute( ) {
    //do programmer's command
  }
}

public class Politician implements Command {

  public void execute( ) {
    //do Politician's command
  }
}
 


按照通常做法,我們就可以直接調用這三個Command,但是使用Command模式,我們要將他們封裝起來,扔到黑盒子List里去:


public class producer{
  public static List produceRequests() {
    List queue = new ArrayList();
    queue.add( new DomesticEngineer() );
    queue.add( new Politician() );
    queue.add( new Programmer() );
    return queue; 
  }

}

 

這三個命令進入List中后,已經失去了其外表特征,以后再取出,也可能無法分辨出誰是Engineer 誰是Programmer了,看下面客戶端如何調用Command模式:


public class TestCommand {
  public static void main(String[] args) {
    
    List queue = Producer.produceRequests();
    for (Iterator it = queue.iterator(); it.hasNext(); )
      
 //客戶端直接調用execute方法,無需知道被調用者的其它更多類的方法名。
        ((Command)it.next()).execute();
  

  }
} 
 

由此可見,調用者基本只和接口打交道,不合具體實現交互,這也體現了一個原則,面向接口編程,這樣,以后增加第四個具體命令時,就不必修改調用者TestCommand中的代碼了.

理解了上面的代碼的核心原理,在使用中,就應該各人有自己方法了,特別是在如何分離調用者和具體命令上,有很多實現方法,上面的代碼是使用"從List過一遍"的做法.這種做法只是為了演示.


使用Command模式的一個好理由還因為它能實現Undo功能.每個具體命令都可以記住它剛剛執行的動作,并且在需要時恢復.

Command模式在界面設計中應用廣泛.Java的Swing中菜單命令都是使用Command模式

 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜精品在线观看| 日韩三级视频在线看| 国产99久久久精品| 欧美人牲a欧美精品| 91捆绑美女网站| 亚洲成人一区二区| 天堂一区二区在线| 日韩电影网1区2区| 秋霞电影一区二区| 欧美国产精品中文字幕| 99国产精品久| 色综合久久天天综合网| 欧美三级在线播放| 7777精品伊人久久久大香线蕉 | 五月开心婷婷久久| 日韩三级精品电影久久久| 久久国产精品99久久人人澡| 国产精品久久久久久亚洲毛片| 国产精品美女一区二区三区| 综合色天天鬼久久鬼色| 欧美一卡2卡三卡4卡5免费| 国内精品国产三级国产a久久 | 国产精品久久久久久久浪潮网站| 国产精品久久久久久久浪潮网站| 亚洲色大成网站www久久九九| 91 com成人网| 色视频成人在线观看免| 欧美精品免费视频| 久久综合资源网| 亚洲天天做日日做天天谢日日欢| 欧美本精品男人aⅴ天堂| 久久欧美一区二区| 亚洲免费av观看| 中文在线免费一区三区高中清不卡| 在线成人午夜影院| 91碰在线视频| 日韩精品最新网址| 欧美日韩国产经典色站一区二区三区| 成人小视频免费在线观看| 色域天天综合网| 精品入口麻豆88视频| 亚洲精品免费一二三区| 欧美国产日韩在线观看| 一区二区三区在线观看动漫| 国产精品免费丝袜| 蜜臀久久久久久久| 日韩综合小视频| av在线一区二区| 久久综合成人精品亚洲另类欧美| 欧美日韩极品在线观看一区| 国产日韩精品一区二区浪潮av | 欧美一区二区三区性视频| 国产精品电影一区二区| 久久国产视频网| 欧美男同性恋视频网站| 中文字幕在线观看不卡视频| 精品一区二区三区欧美| 国产一区二区电影| 欧美一区二区三区影视| 亚洲第一福利一区| 91麻豆6部合集magnet| 久久精品亚洲麻豆av一区二区| 日本在线不卡一区| 欧美艳星brazzers| 亚洲精选免费视频| 成人a区在线观看| 国产精品青草综合久久久久99| 亚洲国产精品v| 亚洲欧美区自拍先锋| 樱桃国产成人精品视频| 亚洲一区二区三区三| 91香蕉视频mp4| 欧美美女直播网站| 亚洲线精品一区二区三区| 91麻豆文化传媒在线观看| 欧美体内she精视频| 日韩一二三四区| 日本一区二区在线不卡| 国产sm精品调教视频网站| 91在线视频免费91| 一区二区三区四区高清精品免费观看 | 中文乱码免费一区二区| 成人小视频免费观看| 欧美乱妇15p| 久久综合久久综合九色| 国产sm精品调教视频网站| 国产精品入口麻豆原神| 日日摸夜夜添夜夜添国产精品| 精品一区二区免费看| 久久婷婷成人综合色| 国产成人免费视频网站高清观看视频| 久久久久国产精品麻豆| 91影院在线免费观看| 亚洲高清久久久| a亚洲天堂av| 亚洲一区在线观看网站| 国产成人精品影院| 自拍偷拍亚洲欧美日韩| 欧美日韩在线亚洲一区蜜芽| 中文字幕欧美国产| 日本女人一区二区三区| 精品免费国产一区二区三区四区| 福利一区在线观看| 日韩一区二区精品| 亚洲欧美日韩国产中文在线| 欧美片网站yy| 一区二区三区在线影院| 日韩精品中文字幕在线一区| 一区二区三区四区在线| 日韩精品一区在线观看| 成人av影视在线观看| 亚洲国产日韩精品| 国产欧美一区在线| 国产精品乡下勾搭老头1| 亚洲人成网站色在线观看| 国产乱码精品1区2区3区| 一区二区三区毛片| 91高清视频在线| 亚洲少妇30p| 粉嫩在线一区二区三区视频| 亚洲成人资源在线| 色成年激情久久综合| 国产自产v一区二区三区c| 亚洲一区二区在线播放相泽| 99国产精品久久久| 专区另类欧美日韩| 亚洲精品在线一区二区| 日本一道高清亚洲日美韩| 成人免费小视频| 国产视频一区在线观看| 91麻豆精品国产91久久久| 午夜视频久久久久久| 国产精品麻豆网站| 97久久精品人人爽人人爽蜜臀| 国产精品网站导航| 91小视频在线观看| 成人激情电影免费在线观看| 欧美国产日韩在线观看| 精品国产一区二区精华| 日韩一级成人av| 国产精品一区在线观看乱码| 国产校园另类小说区| 精品日韩av一区二区| 久久亚洲影视婷婷| 日韩一区二区精品葵司在线| 1000精品久久久久久久久| 盗摄精品av一区二区三区| 久久se精品一区精品二区| 日韩av一二三| 日韩精品三区四区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 美女网站在线免费欧美精品| 一区二区久久久| 日韩欧美一二区| 成人免费毛片a| 成人理论电影网| aaa亚洲精品一二三区| 五月激情丁香一区二区三区| 一区二区三区av电影 | 日韩视频中午一区| 日韩精品一区国产麻豆| 国产精品888| 亚洲高清在线精品| 国产日产欧美一区二区三区| 色就色 综合激情| 韩日精品视频一区| 国产一区999| 亚洲欧洲中文日韩久久av乱码| 在线成人免费观看| 成人av网站免费观看| 视频在线在亚洲| 精品一区二区三区在线观看国产| 日韩理论片一区二区| 精品久久人人做人人爽| 国产香蕉久久精品综合网| 91成人免费在线| 国产成人日日夜夜| 色av一区二区| 日韩女优电影在线观看| 色综合天天综合狠狠| 欧美亚洲综合色| 欧美不卡视频一区| 亚洲日本中文字幕区| 国产性色一区二区| 一区二区三区av电影| 中文字幕第一区第二区| 亚洲综合色自拍一区| 狠狠色丁香久久婷婷综| 日本韩国一区二区三区| 日韩精品一区二区三区在线播放| 欧美色偷偷大香| 久久久亚洲欧洲日产国码αv| 在线观看欧美黄色| 久久精品人人做| 午夜精品免费在线观看| 国产寡妇亲子伦一区二区| 欧洲国产伦久久久久久久| 99精品久久99久久久久| 欧美日本在线视频| 综合激情网...|