肖正文命令模式[26頁]
《肖正文命令模式[26頁]》由會員分享,可在線閱讀,更多相關(guān)《肖正文命令模式[26頁](26頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、云南大學軟件學院 實 驗 報 告 序號: 姓名:肖正文 學號:20121120141專業(yè):軟件工程 日期:2014/12/22 成績: 實驗四 命令模式的運用 一、實驗?zāi)康模? 命令模式將“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數(shù)化其他對象,命令模式也支持可撤銷的操作。在熟悉命令模式相關(guān)理論知識的基礎(chǔ)上,使用命令模式實現(xiàn)圖片處理程序。 二、實驗要求: 使用命令模式實現(xiàn)圖片處理程序,要求如下: 1. 圖片處理程序要有3張圖片。 2. 每張圖片至少有3種操作。 3. 實現(xiàn)類似遙控器的菜單,動態(tài)的選擇對圖片進行的處理。 4.
2、 要有“撤消操作”,撤消操作要可以撤銷至最后一步。 1、 設(shè)計并繪制該程序的類圖; 2、 依照設(shè)計的類圖使用Java語言編寫代碼,并實現(xiàn)該程序; 3、 除了核心的模式相關(guān)類實現(xiàn)外,提供測試環(huán)境,按照難度高低,分別是: a) 控制臺程序,Client硬編碼初始化模式和測試環(huán)境,運行結(jié)果文本輸出; b) 控制臺程序,Client初始化測試環(huán)境,并根據(jù)用戶輸入運算,運行結(jié)果文本輸出; c) 設(shè)計并實現(xiàn)用戶UI,Client初始化測試環(huán)境,并根據(jù)用戶在UI控件上的輸入運算,運行結(jié)果文本輸出; 三、實驗內(nèi)容: 1體系結(jié)構(gòu) 2類圖 1. 命令 2. package xia
3、o.it.Commend; 3. /** 4. * 命令接口 5. * @author Administrator 6. * 7. */ 8. public interface Command { 9. public String execute(); 10. } 每張圖片1的控制命令 1切割 package xiao.it.ConcreteCommend1; import xiao.it.Commend.Command; import xiao.it.Picture.Picture1; public class CutCommand implemen
4、ts Command { Picture1 p1=null; public CutCommand(Picture1 p){ this.p1=p; } @Override public String execute() { // TODO Auto-generated method stub return p1.cut(); } } 2旋轉(zhuǎn) package xiao.it.ConcreteCommend1; import xiao.it.Commend.Command; import xiao.it.Picture.Pictu
5、re1; /** * 對圖像1進行旋轉(zhuǎn) * @author Administrator * */ public class RotaCommand implements Command { Picture1 p1=null; public RotaCommand(Picture1 p){ this.p1=p; } @Override public String execute() { // TODO Auto-generated method stub return p1.rota(); } } 3平移 pack
6、age xiao.it.ConcreteCommend1; import xiao.it.Commend.Command; import xiao.it.Picture.Picture1; public class TransCommand implements Command{ Picture1 p1=null; public TransCommand(Picture1 p){ this.p1=p; } @Override public String execute() { // TODO Auto-generated method s
7、tub return p1.trans(); } } 圖片2的具體命令 1放大 package xiao.it.ConcreteCommend2; import xiao.it.Commend.Command; import xiao.it.Picture.Picture1; import xiao.it.Picture.Picture2; /** * 對圖片2進行放大 * @author Administrator * */ public class FangdaCommand implements Command { Picture2 p
8、2=null; public FangdaCommand(Picture2 p){ this.p2=p; } @Override public String execute() { // TODO Auto-generated method stub return p2.Fangda(); } } 2縮小 package xiao.it.ConcreteCommend2; import xiao.it.Commend.Command; import xiao.it.Picture.Picture2; /** * 對圖片2進
9、行縮小 * @author Administrator * */ public class SuoxiCommand implements Command{ Picture2 p2=null; public SuoxiCommand(Picture2 p){ this.p2=p; } @Override public String execute() { // TODO Auto-generated method stub return p2.Suoxi(); } } 3偽彩色 package xiao.it.
10、ConcreteCommend2; import xiao.it.Commend.Command; import xiao.it.Picture.Picture2; public class WecaiseCommand implements Command { Picture2 p2=null; public WecaiseCommand(Picture2 p){ this.p2=p; } @Override public String execute() { // TODO Auto-generated method stub
11、 return p2.Wecaise(); } } 圖片3處理方式 濾波 package xiao.it.ConcreteCommend3; import xiao.it.Commend.Command; import xiao.it.Picture.Picture2; import xiao.it.Picture.Picture3; /*8 * 對圖片3進行濾波 */ public class LuBoCommand implements Command { Picture3 p3=null; public LuBoCommand(Pic
12、ture3 p){ this.p3=p; } @Override public String execute() { // TODO Auto-generated method stub return p3.LuBo(); } } 2銳化 package xiao.it.ConcreteCommend3; import xiao.it.Commend.Command; import xiao.it.Picture.Picture3; /** * 對圖片3進行銳化 * @author Administrator * */
13、 public class RuihaCommand implements Command { Picture3 p3=null; public RuihaCommand(Picture3 p){ this.p3=p; } @Override public String execute() { // TODO Auto-generated method stub return p3.Ruiha(); } } 曾強 package xiao.it.ConcreteCommend3; import xiao.it.Commen
14、d.Command; import xiao.it.Picture.Picture3; /** * 對圖片3進行增強 * @author Administrator * */ public class ZenQiangCommand implements Command { Picture3 p3=null; public ZenQiangCommand(Picture3 p){ this.p3=p; } @Override public String execute() { // TODO Auto-generated me
15、thod stub return p3.ZenQiang(); } } 遠程控制器 package xiao.it.control; import java.util.ArrayList; import xiao.it.Commend.Command; import xiao.it.NullConcreteCommend.Nocommand; /** * 帶有撤銷的三種操作 * @author Administrator * */ public class RenoteControler { Command[] com1; Co
16、mmand[] com2;
Command[] com3;
public static int length;
//用來存儲一系列的撤銷命令,以達到棧的目的
ArrayList
17、and[3]; com3=new Command[3]; for(int i=0;i<3;i++){ com1[i]=nocommand; com2[i]=nocommand; com3[i]=nocommand; } } /** * 為每一張圖片分配三種操作 * @param picture * @param com1 * @param com2 * @param com3 */ public void setCommond(int picture,Co
18、mmand com1,Command com2,Command com3){ 1[picture]=com1; 2[picture]=com2; 3[picture]=com3; } /** * 對指定圖片進行第一種操作 * @param picture * @return */ public String operation1(int picture){ this.undocommnd.add(com1[picture]); return com1[picture].execute(); }
19、 /** * 對指定圖片進行第二種操作 * @param picture * @return */ public String operation2(int picture){ this.undocommnd.add(com2[picture]); return com2[picture].execute(); } /** * 對指定圖片進行第三種操作 * @param picture * @return */ public String operation3(int picture){
20、 this.undocommnd.add(com3[picture]); return com3[picture].execute(); } /** * 對圖片進行撤銷操作 * @return */ public void Undo(){ length=undocommnd.size(); System.out.println(length); } public String upstep(){ length--; if(length>=0){ return undocommnd.get(lengt
21、h).execute(); }else{ return null; } } public String toString(){ return"圖片1\n {1 旋轉(zhuǎn) 2切割 3平移}\n\n\n 圖片2\n {1 放大 2縮小 3偽彩色}\n\n\n 圖片3\n {1 銳化 2濾波 3增強}"; } } 無命令狀態(tài) package xiao.it.NullConcreteCommend; import xiao.it.Commend.Command; public class Nocommand imple
22、ments Command { @Override public String execute() { // TODO Auto-generated method stub return null; } } 圖片類 package xiao.it.Picture; /** * 圖片1 * @author Administrator * */ public class Picture1 { /** * * 對圖片1進行旋轉(zhuǎn) */ public String rota(){ return "圖片1旋轉(zhuǎn)"; } /*
23、* * 對圖片1切割 */ public String cut(){ return "圖片1切割"; } /** * 對圖片1平移 */ public String trans(){ return "圖片1平移"; } } package xiao.it.Picture; /** * 圖片2 * @author Administrator * */ public class Picture2 { /** * 圖片2放大 */ public String Fangda(){ return "圖片2放大
24、"; } /** * 圖片2縮小 */ public String Suoxi(){ return "圖片2縮小"; } /** * 圖片2偽彩色 */ public String Wecaise(){ return "偽彩色"; } } package xiao.it.Picture; /** * 圖片3 * @author Administrator * */ public class Picture3 { /** * 圖片3銳化 */ public String Ruiha(){ retur
25、n "圖片3銳化"; } /** * 圖片3濾波 */ public String LuBo(){ return "圖片3濾波"; } /** * 圖片3增強 */ public String ZenQiang(){ return "圖片3增強"; } } UI類 package xiao.it.UI; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionList
26、ener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextArea; import javax.swing.JTextFi
27、eld; import xiao.it.ConcreteCommend1.CutCommand; import xiao.it.ConcreteCommend1.RotaCommand; import xiao.it.ConcreteCommend1.TransCommand; import xiao.it.ConcreteCommend2.FangdaCommand; import xiao.it.ConcreteCommend2.SuoxiCommand; import xiao.it.ConcreteCommend2.WecaiseCommand; import xia
28、o.it.ConcreteCommend3.LuBoCommand; import xiao.it.ConcreteCommend3.RuihaCommand; import xiao.it.ConcreteCommend3.ZenQiangCommand; import xiao.it.Picture.Picture1; import xiao.it.Picture.Picture2; import xiao.it.Picture.Picture3; import xiao.it.control.RenoteControler; public class UI { Re
29、noteControler re=null; //三張圖片 Picture1 p11=null; Picture2 p21=null; Picture3 p31=null; /** * 對圖片1的三種操作 */ CutCommand cut=null; RotaCommand rot=null; TransCommand tran=null; /** * 對圖片2的三種操作 * */ FangdaCommand fa=null;
30、 SuoxiCommand su=null; WecaiseCommand wc=null; /** * 對圖片3的三種操作 * */ LuBoCommand lb=null; RuihaCommand rh=null; ZenQiangCommand zq=null; public void init() { JFrame f = new JFrame(); f.setBounds(0, 0, 400, 600); String str[] = { "圖片1", "圖片2", "
31、圖片3" }; JPanel p1 = new JPanel(); JButton l1 = new JButton("圖片變換1:"); p1.add(l1); JPanel p2 = new JPanel(); JButton l2 = new JButton("圖片變換2:"); p2.add(l2); JPanel p3 = new JPanel(); JButton l3 = new JButton("圖片變換3:"); p3.add(l3); JPanel p4 = new JPan
32、el();
JButton l4 = new JButton("我要撤銷:");
p4.add(l4);
JPanel p5 = new JPanel();
JButton l5 = new JButton("上一步:");
p5.add(l5);
final JTextArea pp=new JTextArea();
final JComboBox
33、// j1.setBounds(0, 0, 200, 20); Box box1 = Box.createVerticalBox(); Box box2 = Box.createVerticalBox(); box1.add(j1); box1.add(p1); box1.add(p2); box1.add(p3); box1.add(p4); box1.add(p5); //初始化就顯示變換規(guī)則 re=new RenoteControler(); //三張圖片 p11=new Picture1();
34、 p21=new Picture2(); p31=new Picture3(); /** * 對圖片1的三種操作 */ cut=new CutCommand(p11); rot=new RotaCommand(p11); tran=new TransCommand(p11); /** * 對圖片2的三種操作 * */ fa=new FangdaCommand(
35、p21); su=new SuoxiCommand(p21); wc=new WecaiseCommand(p21); /** * 對圖片3的三種操作 * */ lb=new LuBoCommand(p31); rh=new RuihaCommand(p31); zq=new ZenQiangCommand(p31); re.setCommond(0, cut, rot, tran); r
36、e.setCommond(1, fa, su, wc); re.setCommond(2, lb, rh, zq); final JTextArea tea = new JTextArea(); tea.setText(re.toString()); // 圖片變換1 l1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-gener
37、ated method stub String string=(String)j1.getSelectedItem(); if(string.equals("圖片1")){ pp.append(re.operation1(0)+"\n"); }else if(string.equals("圖片2")){ pp.append(re.operation1(1)+"\n"); }else if(string.equals("圖片3")){ pp.append(re.operation1
38、(2)+"\n"); } } }); //圖片變換2 l2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String string=(String)j1.getSelectedItem(); if(string.equals("圖片1")){ pp.append(re.operati
39、on2(0)+"\n"); }else if(string.equals("圖片2")){ pp.append(re.operation2(1)+"\n"); }else if(string.equals("圖片3")){ pp.append(re.operation2(2)+"\n"); } } }); //圖片變換3 l3.addActionListener(new ActionListener() { @Override public void actionPe
40、rformed(ActionEvent e) { // TODO Auto-generated method stub String string=(String)j1.getSelectedItem(); if(string.equals("圖片1")){ pp.append(re.operation3(0)+"\n"); }else if(string.equals("圖片2")){ pp.append(re.operation3(1)+"\n"); }else if(string.equ
41、als("圖片3")){ pp.append(re.operation3(2)+"\n"); } } }); //我要撤銷 l4.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub re.Undo(); } }); //上一步 l5.addActionListener(
42、new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String str=re.upstep(); if(str!=null){ pp.append("回到上一步:"+str+"\n"); } } }); box2.add(new JScrollPane(tea)); JSplit
43、Pane top = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, false, box1, box2); JSplitPane tep = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, top, new JScrollPane(pp)); f.add(tep); f.setVisible(true); } public static void main(String[] args) { new UI().init(); } } 運行效果截圖 四、實驗總結(jié): 指導教師簽名:
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導班子2024年度民主生活會對照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學習材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國特色金融發(fā)展之路加快建設(shè)金融強國(范文)
- 鍋爐基礎(chǔ)知識:啟爐注意事項技術(shù)問答題
- 領(lǐng)導班子2024年度民主生活會“四個帶頭”對照檢查材料范文(三篇)
- 正常運行時影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復習題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復習題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運行監(jiān)視和調(diào)整