設計模式第二次做業

一、要求:若是須要開發一個跨平臺視頻播放器,能夠在不一樣操做系統平臺(如Windows、Linux、UNIX等)上播放多種格式的視頻文件,常見的視頻格式包括MPEG、RMVB、AVI、WMV等。使用Bridge模式來設計。
類圖:
算法

代碼:windows

public class Client {
      public static void main(String args[]) {  
            SP  ShiPin;  
            SPImpl   ShiPinImpl;  
            ShiPin.setimpl(ShiPinImpl);  
            ShiPin.parseFile("測試視頻");  
        }  
    }

    public class BF {
    public static void main(String[] args) {
        System.out.println("播放");
     }
    

    abstract class shipin {
    protected spimpl impl;

    public spimpl getimpl() {
        return impl;
    }

    public void setimpl(spmpl impl) {
        this.impl = impl;
    }

    public abstract void parsefile(String fileName);
    }


    public interface spImpl {
    public void play(BF m);  //顯示視頻矩陣
    }

   }

    public class WindowsImpl implements spImpl {
    public void play(BF m) {
        System.out.println("windows操做系統");

    }

    }

   public class LinuxImpl implements spImpl {
    public void play(BF m) {
        System.out.println("Linux操做系統");
    }

    }


    public class UnixImpl implements spImpl {
    public void play(BF m) {
        System.out.println("Unix操做系統");
    }

    }

    public class MPEGSP extends shipin{
    public void parseFile(String fileName) {  
        BF m = new BF();
        impl.play(m);
        System.out.println(fileName+",格式爲PMEG");
    }

    }


    public class RMVBSP extends shipin{
    public void parseFile(String fileName) {   
        BF m = new BF();
        impl.play(m);
        System.out.println(fileName+",格式爲RMVB");
    }

    }


    public class WMVSP  extends shipin {
    public void parseFile(String fileName) { 
        BF m = new BF();
        impl.play(m);
        System.out.println(fileName+",格式爲WMV");
    }

    }


    public class AVISP extends shipin{
    public void parseFile(String fileName) {
        BF m = new BF();
        impl.doPaint(m);
        System.out.println(fileName+",格式爲AVI");
    }

    }

二、要求:殺毒軟件(AntiVirus)既能對系統中不一樣類型的文件 TextFile、ImageFile、VideoFile殺毒,也能對文件夾的殺毒,對文件夾殺毒就是對其中所包含文件的殺毒。使用Composite模式來設計。
類圖:
ide

代碼:測試

Abstract   class  AbstractFile
{
public abstract void add(AbstractFile file); 
public abstract void remove(AbstractFile file); 
public abstract void killVirus();
public abstract AbstractFile getChild(int i); 
}

Public  Folder extend  AbstractFile()
{
Protected List<AbstractFile>_children=new List<AbstractFile>();
Public  void killvirus()
{
     System.out.printlin(「進行殺毒!」);
     Foreach( var child in _children)
{
    child.killvirus();
}
}
Public  void add (AbstractFile  child)
{
_children.add(child);
}
Public  void rename (AbstractFile  child)
{
_children.remove(child);
}
Public void getchild (int i)
{
_children.getchild(i);
}

}

Public  class ImageFile extend  AbstractFile()
{
Public  void killvirus()
{
     System.out.printlin(「進行殺毒!」);
}
Public  void add (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public  void rename (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public void getchild (int i)
{
System.out.println("錯誤,不支持該方法!");
Return null;

}

}
Public  class TextFile extend  AbstractFile()
{
Public  void killvirus()
{
     System.out.printlin(「進行殺毒!」);
}
Public  void add (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public  void rename (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public void getchild (int i)
{
System.out.println("錯誤,不支持該方法!");
Return null;

}

}
Public  class VideoFile extend  AbstractFile()
{
Public  void killvirus()
{
     System.out.printlin(「進行殺毒!」);
}
Public  void add (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public  void rename (AbstractFile  child)
{
System.out.println("錯誤,不支持該方法!");
}
Public void getchild (int i)
{
System.out.println("錯誤,不支持該方法!");
Return null;
}

}
Public class Client
{
Public void Test
{
Folder floder1=new Folder(「個人文件」);
ImageFile floder2=new ImageFile(「圖像文件」);
TextFile floder3=new TextFile(「文本文件」);
VideoFile floder4=new VideoFile(「視頻文件」);

floder1.add(floder2);
floder1.add(floder3);
floder1.add(floder4);

floder1.killvirus();
floder2.killvirus();
floder3.killvirus();
floder4.killvirus();


}
}

三、要求:某系統提供一個數據加密功能,能夠對字符串進行加密。最簡單的加密算法經過對字母進行移位來實現,同時還提供稍複雜的逆向輸出加密,還提供更爲高級的求模加密。用戶首先使用最簡單的加密算法對字符串進行加密,若是以爲還不夠能夠對加密後的結果使用其餘的加密算法進行二次加密,固然也能夠進行第三次加密。使用Decrator模式來設計。
類圖:
ui

代碼:
~~~
public abstract class Lock {
public abstract String dolock(String str);
}this

public class Lockoperate extends Lock
{
public String dolock(String str)
{
String lockstr = str進行加密;
return lockstr;
}
}
public class LockDecorator extends Lock
{ private Lock lock ;
public LockDecorator(Lock lock)
{ this.lock = lock ; }
public String dolock(String str)
{ return lock.dolock(str); }
}加密

public class lockDecorator extends LockDecorator
{
public String dolock(String str)
{
return this.reverse(str);
}
public String reverse(String str)
{
String newstr =str 進行逆向加密;
return newstr;
}
}
public class newlockDecorator extends LockDecorator
{
public String dolock(String str)
{
return this.newlock(str);
}
public String newlock(String str)
{
String newstr =str 進行求模加密;
return newstr;
}
}
public class Test { public static void main(String[] args)
{
String str = "ceshi";
Lock lock= new LockOperate(str);
Lock reverse = new lockDecorator(lock);操作系統

Lock new = new newlockDecorator(reverse);
System.out.println(new.newlock(str));
}
}
~~~設計

四、要求:某系統須要提供一個文件加密模塊,加密流程包括:讀源文件、加密、保存加密文件。讀取文件和保存文件使用流來實現,三個業務相對獨立,封裝在不一樣的類中;如今須要提供一個統一的加密外觀類,用戶能夠直接使用該加密外觀類完成文件的讀取、加密和保存三個操做。使用Facade模式來設計。
類圖:3d

代碼:

Public class FileReader
{
public string fileread(string fileName) 
{ 
FileStream  fs = null; 
StringBuilder sb = new StringBuilder(); 
try { 
fs = new FileStream(fileNameSrc, FileMode.Open); 
int data; 
while((data = fs.ReadByte())!= -1) 
{  sb = sb.Append((char)data); } 
fs.Close(); 
} 
catch(FileNotFoundException e) 
{ 
System.out.println("文件不存在!");
} 
catch(IOException e) 
{ 
System.out.println("文件操做錯誤!");
}
 return sb.ToString(); }
}

Public class FileL
{
public string filelock(string str) 
{
文件加密;
}
}

Public class FileWrite
{
public void  filewrite(string Str,string fileName) 
{ 
Console.WriteLine("保存文件。"); 
FileStream fs = null; 
try { 
fs = new FileStream(fileNameDes, FileMode.Create); 
byte[] str = Encoding.Default.GetBytes(encryptStr); 
fs.Write(str,0,str.Length); 
fs.Flush(); fs.Close(); 
} 
catch(FileNotFoundException e) 
{ System.out.println("文件不存在!");
} 
catch(IOException e)
 { 
System.out.println("文件操做錯誤!");
 } }
}
Public class FileLock
{
private FileReader reader; 
private FileL locker; 
private FileWriter writer;

public Lockone() 
{ 
reader = new FileReader(); 
locker = new FileL(); 
writer = new FileWriter(); 
}
public Locktwo() 
{ 
string Str = reader.filereader(fileName); 
string lockStr = locker.filelock(Str); 
writer.writer(lockStr , fileName); 
}

}

Public class Client { 
static void Main(string[] args) 
{ 
FileLock ef = new FileLock(); 
ef.LockTwo("src.txt", "des.txt"); 
 
} 
}

五、要求:某論壇已註冊用戶和遊客的權限不一樣,已註冊用戶擁有發帖、修改本身的註冊信息等功能;遊客只能看別人的帖子,沒有其餘權限。使用Proxy模式來設計。
類圖:

代碼:
~~~
Public interface LunTan
{
Public void add();
}

Public class LunTanquanxian impements LunTan
{
Public void AddFile()
{
System.out.println(「擁有發帖子的權限!」);
}
}

Public class LunTanProxy implements LunTan
{
Private LunTanquanxian cehsi;
Private int quanxian;
Public LunTanProxy(int quanxian)
{
Ceshi=new LunTanquanxian();
This.quanxian=quanxian;
}
Public void add()
{
If(this.quanxian==1)
{ Ceshi.add(); }
else
{
System.out.printlin(「沒有發帖子的權限」);
}
}
}

public class Client { public static void main(String[] args) { LunTanproxy ceshi=new LunTanproxy(0); ceshi.AddFile(); } } ~~~

相關文章
相關標籤/搜索