设计模式第二次做业

一、要求:若是须要开发一个跨平台视频播放器,能够在不一样操做系统平台(如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(); } } ~~~

相关文章
相关标签/搜索