设计模式第二次作业

1、要求:如果需要开发一个跨平台视频播放器,可以在不同操作系统平台(如Windows、Linux、UNIX等)上播放多种格式的视频文件,常见的视频格式包括MPEG、RMVB、AVI、WMV等。使用Bridge模式来设计。
类图:

代码:


      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");
    }

    }

2、要求:杀毒软件(AntiVirus)既能对系统中不同类型的文件 TextFile、ImageFile、VideoFile杀毒,也能对文件夹的杀毒,对文件夹杀毒就是对其中所包含文件的杀毒。使用Composite模式来设计。
类图:

代码:

    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();


}
}

3、要求:某系统提供一个数据加密功能,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时还提供稍复杂的逆向输出加密,还提供更为高级的求模加密。用户首先使用最简单的加密算法对字符串进行加密,如果觉得还不够可以对加密后的结果使用其他的加密算法进行二次加密,当然也可以进行第三次加密。使用Decrator模式来设计。
类图:

代码:

public abstract class Lock {
public abstract String dolock(String str);
}

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)); 
} 
}

4、要求:某系统需要提供一个文件加密模块,加密流程包括:读源文件、加密、保存加密文件。读取文件和保存文件使用流来实现,三个业务相对独立,封装在不同的类中;现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作。使用Facade模式来设计。
类图:

代码:

    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"); 
 
} 
}

5、要求:某论坛已注册用户和游客的权限不同,已注册用户拥有发帖、修改自己的注册信息等功能;游客只能看别人的帖子,没有其他权限。使用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(); 
} 
}
posted @ 2017-11-13 20:46  小怪兽1  阅读(321)  评论(1编辑  收藏  举报