设计模式-外观模式

外观模式

**

  1. 模式动机
    当一个客户需要与多个业务交互时,之间的联系就会比较繁杂,这时就需要一个中介在负责处理它,这时就需要引入一个新的外观类(Facade)来负责和多个业务类进行交互,此时用户只需和外观类交互;外观类的出现使得客户类只需要和外观类类进行交互,避免了复杂的引用关系,降低了系统的耦合度

在这里插入图片描述

2.模式定义
外观模式又被称为门面模式,是一种对象结构型模式,外部与子系统的交互交由一个统一的外观对象处理,为子系统中的一组接口提供一个统一的入口

3.模式结构

包含两个角色
外观角色:Facade
子系统角色:subsystem

在这里插入图片描述在这里插入图片描述

**
实例

通过外观模式模拟文件的读取,加密,保存等3步操作;

类图
在这里插入图片描述
外观类

import file.Password;
import file.ReadFile;
import file.WriteFile;

import java.io.FileNotFoundException;

public class EncryptFacade {

    private ReadFile readFile;
    private Password password;
    private WriteFile writeFile;


    public EncryptFacade(){
        readFile = new ReadFile();
        password = new Password();
        writeFile = new WriteFile();
    }

    public void encryptFile(String file, String files) throws FileNotFoundException {
        String text,textPassword;
        text=readFile.read(file);
        textPassword=password.encrypt(text);
        writeFile.write(textPassword,files);
    }
}

子系统类

package file;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class WriteFile {

    public void write(String textPassword,String files){
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(files);
            fileOutputStream.write(textPassword.getBytes());
            fileOutputStream.close();
            System.out.println("保存成功");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}



package file;

import java.io.*;

public class ReadFile {

    public String read(String file) throws FileNotFoundException {
        int data;
        StringBuffer stringBuffer = new StringBuffer();
        try {
            InputStream inputStream = new FileInputStream(file);
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            while (((data = inputStreamReader.read())!=-1)){
                    stringBuffer = stringBuffer.append((char)data);
            }
            inputStreamReader.close();
            System.out.println("读取文件,文件内容");
            System.out.println(stringBuffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuffer.toString();
    }
}


package file;

public class Password {

public String encrypt(String text){
    System.out.println("文件加密");
    String textPassword = "";
    for(int i =0;i<text.length();i++){
        String c = String.valueOf(text.charAt(i)%6);
        textPassword+=c;
    }
    System.out.println(textPassword);
    return textPassword;
}
}

测试类

import java.io.FileNotFoundException;

public class Client {

    public static void main(String[] args) throws FileNotFoundException {
        EncryptFacade facade = new EncryptFacade();
        facade.encryptFile("G:\\files.txt","G:\\file.txt");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值