第二次设计模式
1、要求:如果需要开发一个跨平台视频播放器,可以在不同操作系统平台(如Windows、Linux、UNIX等)上播放多种格式的视频文件,常见的视频格式包括MPEG、RMVB、AVI、WMV等。使用Bridge模式来设计。
类图
源码
public abstract class OperatingSystem {
protect string videoFile ;
public void setVideo(string VideoFile ) {
this.vf = vf;
}
public abstract void play(string videoFile){}
}
public class LinuxOS extends OperatingSystem {
@override
public void play(string videoFile) {}
}
public interface VideoFile {
public void decode(string os, string videoFile){}
}
public class AVIvideoFile implements videoFile {
public void decode(String os, String videoFile) {}
}
2、要求:杀毒软件(AntiVirus)既能对系统中不同类型的文件 TextFile、ImageFile、VideoFile杀毒,也能对文件夹的杀毒,对文件夹杀毒就是对其中所包含文件的杀毒。使用Composite模式来设计。
类图
源码
public abstract class AbstractFile{
protected string name;
public abstract void killvirus(){}
}
public class Folder extends AbstractFile{
private ArrayList<AbstractFile> FileList;
private string name;
@override
public void killvirus(){}
}
public class TextFile extends AbstractFile{
private string name;
@override
public void killvirus(){}
}
3、要求:某系统提供一个数据加密功能,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时还提供稍复杂的逆向输出加密,还提供更为高级的求模加密。用户首先使用最简单的加密算法对字符串进行加密,如果觉得还不够可以对加密后的结果使用其他的加密算法进行二次加密,当然也可以进行第三次加密。使用Decrator模式来设计。
类图
源码
public abstract class Cipher {
abstract String encrypt(String text);
}
public class SimpleCiphrt extends Cipher {
@Override
String encrypt(String text) {}
}
public class CipherDecorator extends EncryptComponent {
public Cipher CipherDecorator() {
this.Cipher = Cipher;
}
@Override
String encrypt(string text) {}
}
public class ModCipher extends CipherDecorator {
@Override
string encrypt(String text) {}
public string mod(String text){}
}
4、要求:某系统需要提供一个文件加密模块,加密流程包括:读源文件、加密、保存加密文件。读取文件和保存文件使用流来实现,三个业务相对独立,封装在不同的类中;现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作。使用Facade模式来设计。
类图
源码
public class EncryptFacade {
private FileReader reader;
private CipherMachine cipher;
private FileWriter writer;
FileEncrpyt(){}
}
public class Reader{
public string read(){}
}
public class Writer{
public void write(){}
}
public string Cipher{
public string ebcrpyt(){}
}
5、要求:某论坛已注册用户和游客的权限不同,已注册用户拥有发帖、修改自己的注册信息等功能;游客只能看别人的帖子,没有其他权限。使用Proxy模式来设计
类图
源码
abstract class Permission{
public abstract void modify(){}
public abstract void view(){}
public abstract void post(){}
}
class PermissionProxy extends Permission{
private RealPermission permission=new RealPermission();
@override
public void modify(){}
@override
public void view(){}
@override
public void post(){}
}
class RealPermission extends Permission{
@override
public void modify(){}
@override
public void view(){}
@override
public void post(){}
}