设计模式第二次作业

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

1214974-20171114104311874-94415777.png

public abstract class VideoFile
{
    public abstract void decode();
}

public abstract class MPEG extends VideoFile
{

    @Override
    public void decode()
    {

    }
}

public abstract class AVI extends VideoFile
{

    @Override
    public void decode()
    {

    }
}

public abstract class WMV extends VideoFile
{

    @Override
    public void decode()
    {

    }
}

public abstract class RMVB extends VideoFile
{

    @Override
    public void decode()
    {

    }
}





public abstract class VideoPlayer
{
    protected VideoFile videoFile;
    public abstract void play();
    public void setVideoFile(VideoFile videoFile)
    {
        this->videoFile = videoFile;
    }

}

public abstract class WindowVideoPlayer extends VideoPlayer
{
    @Override
    public void play()
    {
        videoFile.decode();
        
    }
}

public abstract class LinuxVideoPlayer extends VideoPlayer
{
    @Override
    public void play()
    {
        videoFile.decode();
        
    }
}

public abstract class UnixVideoPlayer extends VideoPlayer
{
    @Override
    public void play()
    {
        videoFile.decode();

    }
}


public class Client
{
    public public static void main(String[] args) 
    {
        VideoPlayer videoPlayer = new WindowVideoPlayer();
        videoFile videoFile = new RMVB();

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

1214974-20171114112555327-974250305.png

public abstract class FileAntiVirus
{
    public abstract boolean AntiVirus();
}


public class TextFileAntiVirus extends FileAntiVirus
{
    @Override
    public boolean AntiVirus()
    {

    }
}

public class ImageFileAntiVirus extends FileAntiVirus
{
    @Override
    public boolean AntiVirus()
    {
        
    }
}

public class VideoFileAntiVirus extends FileAntiVirus
{
    @Override
    public boolean AntiVirus()
    {
        
    }
}

public class DirFileAntiVirus extends FileAntiVirus
{
    private List<FileAntiVirus> antiVirusArrayList = new ArrayList<>();

    @Override
    public boolean AntiVirus()
    {
        
    }

    public boolean add()
    {

    }

    public boolean del()
    {

    }

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

1214974-20171114205356515-1970352764.png

public abstract class Encryption
{
    public abstract boolean shiftEncrypt(String str);
    public abstract boolean reverseEncrypt(String str);
    public abstract boolean advancedEncrypt(String str);
}

public class Shift
{
    @Override
    public String shiftEncrypt(String str)
    {

    }
}

public class Reverse
{
    @Override
    public String shiftEncrypt(String str)
    {
        
    }
}

public class Advanced
{
    @Override
    public String shiftEncrypt(String str)
    {
        
    }
}



public class EncryptorDecrator
{
    private Encryption encryptor;
    private String encryptedStr;

    public boolean encrypt(int NO,String str)
    {
        if(NO == 0)
            encryptedStr = encryptor.shiftEncrypt(str);
        else if(NO == 1)
            encryptedStr = encryptor.reverseEncrypt(str);
        else
            encryptedStr = encryptor.advancedEncrypt(str);
    }

    public String getEncryptedStr()
    {
        return encryptedStr;
    }
}

public class Client
{
    public static void main(String[] args) 
    {
        String str = "123456";
        EncryptorDecrator dector;
        dector.encrypt(1,str);
        String str2 = dector.getEncryptedStr();
    }
}

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

1214974-20171115152204452-2058734639.png

public class Stream
{
    public boolean readStream(File file)
    {

    }

    public boolean writeStream(File file)
    {

    }

}


public class Write
{
    public boolean write(File file)
    {
        new Stream().writeStream(file);
    }
}

public class Read
{
    public File read(File file)
    {
        new Stream().readStream(file);
    }
}

public class Encryptor
{
    public File encrypt(File file)
    {

    }
}

public class FileEncryptor
{
    private File encrypted_file;
    private File read_file;

    public boolean fileWrite(File file)
    {
        return new Write().write(file);
    }

    public boolean fileRead(File file)
    {
        read_file = new Read().read(file);
    }

    public boolean fileEncrypt(File file)
    {
        encrypted_file = new Encryptor().encrypt(file);
    }

    public File getEncryptedFile()
    {
        return encrypted_file;
    }

    public File getReadFile()
    {
        return read_file;
    }
}


public class Client
{
    public static void main(String[] args) 
    {
        File file,file2;
        FileEncryptor file_encryptor;
        file_encryptor = new FileEncryptor().fileEncrypt(file); 
        file2 = file_encryptor.getEncryptedFile();
    }
}
5、要求:某论坛已注册用户和游客的权限不同,已注册用户拥有发帖、修改自己的注册信息等功能;游客只能看别人的帖子,没有其他权限。使用Proxy模式来设计。
类图:

1214974-20171115130417984-775371731.png

public interface class Man
{
    public abstract void view();
}



public class User implements Man
{
    public void post()
    {

    }

    public void modifyInformation()
    {

    }

    @Override
    public void view()
    {

    }
}


public class Visitor implements Man
{
    @Override
    public void view()
    {
        new User().view();
    }
}



public class Client
{
    public static void main(String[] args) 
    {
            Man man = new Vistor();
            vistor.view();
    }
}

转载于:https://www.cnblogs.com/maskerk/p/7825405.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值