精华内容
下载资源
问答
  • 结构型设计模式实验

    千次阅读 2018-06-14 21:09:07
    1.适配器模式实例之算法适配 现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])...现使用适配器模式设计一个系统,在不修改源代码的情况下将类...

    1.适配器模式实例之算法适配
            现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSortquickSort(int[])方法实现了快速排序算法,类BinarySearchbinarySearch(int[],int)方法实现了二分查找算法。现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中。绘制类图并编程实现。
    2.桥接模式实例之跨平台视频播放器
            如果需要开发一个跨平台视频播放器,可以在不同操作系统平台(如 WindowsLinuxUnix等)上播放多种格式的视频文件,如MPEGRMVBAVIWMV等常见视频格式。现使用桥接模式设计该播放器。
    3.组合模式实例之杀毒软件
           使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本包括TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。
    4.装饰模式实例之界面显示构件库
            某软件公司基于面向对象技术开发了一套图形界面显示构件库VisualComponent。在使用该库构建某图形界面时,用户要求为界面定制一些特效显示效果,如带滚动条的窗体或透明窗体等。现使用装饰模式设计该构件库,绘制类图并编程模拟实现。
    5.外观模式实例之文件加密
            某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类交互,使用外观模式设计该加密模块,要求编程模拟实现。
    6.代理模式实例之日志记录代理
            在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在中输出日志,如在业务方法method()调用之前输出方法method()被调用,调用时间为2012-10-10 101010”,调用之后如果没有抛异常则输出方法方法method()调用成功,否则输出方法method()调用失败。在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块结构,绘制类图并编程模拟实现。

    一.适配器模式

    类图

     

    代码:

    public interface DataOperation { //目标类

    public void sort(int sort[], int i, int j);

    public int search(int search[], int n);

    }

     

    public class AlgotithmAdapter implements DataOperation{ //适配器类

    private QuickSort quick;

    private BinarySearch binary;

    public AlgotithmAdapter(QuickSort quick) {

    this.quick = quick;

    }

    public AlgotithmAdapter(BinarySearch binary) {

    this.binary = binary;

    }

    public void sort(int sort[], int i, int j) {

    quick.quickSort(sort, i, j);

    }

     

    public int search(int search[], int n) {

    return binary.binarySearch(search, n);

    }

    }

     

    public class QuickSort { //适配者类

    //划分数组

    int partion(int array[], int p, int r) {

    int x = array[r];

    int i = p - 1;//注意这点,把i设成负值,然后作为移动的标志

    int j;

    for (j = p; j < r; j++) {

    if (array[j] <= x) {

    i++;

    int temp = array[j];

    array[j] = array[i];

    array[i] = temp;

    }

    }

    int temp = array[j];

    array[j] = array[i + 1];

    array[i + 1] = temp;

    return i+1;//返回的应该是交换后的哨兵的位置

    }

    //递归解决每个划分后的小数组

    void quickSort(int[] array, int p, int r) {

    if (p < r) {

    int q = partion(array, p, r);

    quickSort(array, p, q - 1);

    quickSort(array, q + 1, r);

    }

    }

    }

     

    public class BinarySearch { //适配者类

       public int binarySearch(int[] srcArray, int des){   

          

            int low = 0;   

            int high = srcArray.length-1;   

            while(low <= high) {   

                int middle = (low + high)/2;   

                if(des == srcArray[middle]) {   

                    return middle;   

                }else if(des <srcArray[middle]) {   

                    high = middle - 1;   

                }else {   

                    low = middle + 1;   

                }  

            }  

            return -1;  

       }  

    }

     

    public class Client { //客户端类

    public static void main(String[] args) {

    int[] array = { 4, 3, 5, 2, 3, 6, 8, 9, 18, 12, 53, 20};

    int i;

    System.out.print("排序前:");

    for (i=0; i<array.length; i++)

    System.out.print(array[i]+" ");

    BinarySearch binary = new BinarySearch();

    AlgotithmAdapter algotithm1 = new AlgotithmAdapter(binary);

            System.out.println("\n通过二分查找得到数字5:位于数组的第"+(algotithm1.search(array, 5)+1)+"");  

    QuickSort sort = new QuickSort();

    AlgotithmAdapter algotithm2 = new AlgotithmAdapter(sort);

    algotithm2.sort(array, 0, array.length - 1);

    System.out.println("------------------------------");

    System.out.print("排序后:");

    for (i=0; i<array.length; i++)

    System.out.print(array[i]+" ");

    //int[] src = new int[] {1, 3, 5, 7, 8, 9};   

            System.out.println("\n通过二分查找得到数字5:位于数组的第"+(algotithm1.search(array, 5)+1)+"");  

    }

    }

    二、桥接模式

    Uml

     

    源代码

    AVIFile
    package Bridge;

    public class AVIFile implements VideoFile{
      public void decode(String osType, String fileName) {  
      System.out.println("操作系统:"+osType+"文件名称:"+fileName);  
      }  

    }

    LinuxVersion
    package Bridge;

    public class LinuxVersion extends OperatingSystemVersion {  
      public void play(String fileName) {  
      String osType = "Linux播放";  
      this.vf.decode(osType,fileName);  
      }  

    }

    MPEGFile
    package Bridge;

    public class MPEGFile implements VideoFile{  
      public void decode(String osType, String fileName) {  
      System.out.println("操作系统:"+osType+"文件名称:"+fileName);  
      }  

    }


    OperatingSystemVersion
    package Bridge;

    public abstract class OperatingSystemVersion {
      protected VideoFile vf;  
      
      public void setVideo(VideoFile vf) {  
      this.vf = vf;  
      }  
      
      public abstract void play(String fileName);  

    }

    RMVBFile
    package Bridge;

    public class RMVBFile implements VideoFile {  
      public void decode(String osType, String fileName) {  
      System.out.println("操作系统:"+osType+"文件名称:"+fileName);  
      }  

    }

    Test
    package Bridge;

    public class Test {

      public static void main(String[] args) {
        // TODO Auto-generated method stub
      VideoFile vf;  
      OperatingSystemVersion osType1 = new WindowVersion();  
      vf = new AVIFile();  
      osType1.setVideo(vf);  
      osType1.play("AVI");  
          
      OperatingSystemVersion osType2 = new LinuxVersion();  
      vf = new RMVBFile();  
      osType2.setVideo(vf);  
      osType2.play("RMVB");  
          
      OperatingSystemVersion osType3 = new UnixVersion();  
      vf = new MPEGFile();  
      osType3.setVideo(vf);  
      osType3.play("MPEG");

      }

    }

    UnixVersion
    package Bridge;

    public class UnixVersion extends OperatingSystemVersion {  
      public void play(String fileName) {  
      String osType = "Unix播放";  
      this.vf.decode(osType,fileName);  
      }  

    }

    VideoFile
    package Bridge;

    public interface VideoFile {  
      public void decode(String osType, String fileName);

    }

    WindowVersion
    package Bridge;

    public class WindowVersion extends OperatingSystemVersion {  
      public void play(String fileName) {  
      String osType = "Windows播放";  
      this.vf.decode(osType,fileName);  
      }  

    }

    WMVFile
    package Bridge;

    public class WMVFile implements VideoFile {  
      public void decode(String osType, String fileName) {  
      System.out.println("操作系统:"+osType+"文件名称:"+fileName);  
      }  

    }

    四、外观模式

    Uml

     

    代码:

     

    (1)Client类:

     

    public class Client {

     

    public static void main(String[] args) {

    try

    {

    String text="czy";

    String address="c:设计模式";

    EncryptFacade ec=new EncryptFacade();

    ec.fileEncrypt(text,address);

    }

    catch(Exception e)

    {

    System.out.println(e.getMessage());

    }

    }

     

    }

     

    (2)EncryptFacade类:

     

    public class EncryptFacade {

    private FileReader reader;

    private CipherMachine cipher;

    private FileWriter writer;

    public EncryptFacade()

    {

    reader=new FileReader();

    cipher=new CipherMachine();

    writer=new FileWriter();

    }

    public void fileEncrypt(String fileNameSrc,String fileNameDes)

    {

    String plainStr=reader.read(fileNameSrc);

    String encryptStr=cipher.encrypt(plainStr);

    writer.write(encryptStr,fileNameDes);

    }

     

    }

     

    (3)FileReader类:

     

    public class FileReader {

    public String read(String fileNameSrc)

    {

    String fns=fileNameSrc;

    System.out.println("原文件:"+fns);

    return fns;

    }

    }

     

    (4)FileWriter类:

     

    public class FileWriter {

      

     public void write(String EncryText,String FileNameDes)

     {

     String et=EncryText;

     String fnd=FileNameDes;

     System.out.println("加密后文件:"+et);

     System.out.println("目标文件存放路径为:"+fnd);

     }

    }

     

    (5)CipherMachine类:

     

    public class CipherMachine {

    public String encrypt(String plainText)

    {

    String str="";

    for (int i=0;i<plainText.length();i++)

    {

    char c= plainText.charAt(i);

    if(c>='a'&&c<='z')

    {

    c+=6;

    if(c>'z')c-=26;

    if(c<'a')c+=26;

    }

    if(c>='A'&&c<='Z')

    {

    c+=6;

    if(c>'Z')c-=26;

    if(c<'A')c+=26;

    }

    str+=c;

    }

    return str;

    }

     

    }

    五、代理模式

    uml

     

     

      

    源代码:

    Log
    package proxy;

    public interface Log {
    public void method();
    }

    LogProxy
    package proxy;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class LogProxy implements Log{
      private LogRecord logRecord=new LogRecord();
      private SimpleDateFormat SDF=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      private String time=SDF.format(new Date());
      public void method() {
        System.out.println("方法method被调用!调用时间为:"+time);
        try{
        logRecord.method();    
        System.out.println("方法method()调用成功!");
        }catch(Exception e){
        System.out.println("方法method()调用失败!");
        }
        
        }

    }

    LogRecord
    package proxy;

    public class LogRecord implements Log{
      public void method() {
      System.out.println("真实业务方法被调用!");
      }

    }

    Test
    package proxy;

    public class Test {
      public static void main(String[] args) {
        LogProxy p= new LogProxy();
      p.method();
      }

    }

    展开全文
  • 实验项目二: 创建型设计模式实验 (1)实验目的与原理 ①结合实例,熟练绘制创建型设计模式结构图。 ②结合实例,熟练使用Java面向对象编程语言实现创建型设计模式。 ③通过编程实践,理解每一种创建型设计模式的概念...

    实验项目二: 创建型设计模式实验

    (1)实验目的与原理
    ①结合实例,熟练绘制创建型设计模式结构图。
    ②结合实例,熟练使用Java面向对象编程语言实现创建型设计模式。
    ③通过编程实践,理解每一种创建型设计模式的概念和内涵、结构、优缺点以及应用场景。
    (2)实验内容与步骤
    ①使用简单工厂模式设计一个可以创建不同几何形状( Shape)(例如圆形( Circle).、矩形 Rectangle)和三角形( ( Triangle)等的绘图工具类,每个几何图形均具有绘制方法daw()和擦除方法 erase(),要求在绘制不支持的几何图形时,抛出一个 UnsupportedShapeException异常。绘制类图并编程模拟实现。

    ②在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对POP3协议的连接类POP3Connection、针对IMAP协议的连接类 IMAPConnection、针对HTTP协议的连接类 HTTPConnection等。由于网络连接对象的创建过程较为复杂,需要将其创建过程封装到专门的类中,该软件还将支持更多类型的网络协议。现采用工厂方法模式进行设计,绘制类图并编程模拟实现。

    ③某系统为了改进数据库操作的性能,用户可以自定义数据库连接对象 Connection和语句对象 Statement,针对不同类型的数据库提供不同的连接对象和语句对象,例如提供 Oracle或 MySQL专用连接类和语句类,而且用户可以通过配置文件等方式根据实际需要动态更换系统数据库。使用抽象工厂模式设计该系统,绘制对应的类图并编程模拟实现。

    ④在某赛车游戏中,赛车包括方程式赛车、场地野赛车、运动汽车、卡车等类型,不同类型的赛车的车身、发动机、轮胎、变速箱等部件有所区别。玩家可以自行选择赛车类型,系统将根据玩家的选择创建出一辆完整的赛车。现采用建造者模式实现赛车的构建,绘制对应的类图并编程模拟实现

    ⑤某在线招聘网站中,用户可以创建一个简历模板。针对不同的工作岗位,可以复制该简历模板并进行适当修改后,生成一份新的简历。在复制简历时,用户可以选择是否复制简历中的照片:如果选择“是”,则照片将一同被复制,用户对新简历中的照片进行修改不会影响到简历模板中的照片,对模板进行修改也不会影响到新简历;如果选择“否”,则直接引用简历模板中的照片,修改简历模板中的照片将导致新简历中的照片一同修改,反之亦然。现采用原型模式设计该简历复制功能并提供浅克隆和深克隆两套实现方案,绘制对应的类图并编程模拟实现。

    ⑥某Web性能测试软件中包含一个虚拟用户生成器( Virtual User Generator)。为了避免生成的虚拟用户数量不一致,该测试软件在工作时只允许启动唯一一个虚拟用户生成器。采用单例模式设计该虚拟用户生成器,绘制类图并分别使用饿汉式单例、双重检测锁等二种方式编程模拟实现。

    (3)实验过程
    第一题:简单工厂模式实现创建不同几何图形
    结构类图
    在这里插入图片描述
    实现代码:

    模拟测试截图
    在这里插入图片描述
    第二题:工厂方法模式实现不同网络协议的连接
    结构类图
    在这里插入图片描述

    实现代码:

    模拟测试截图
    在这里插入图片描述

    第三题:抽象工厂模式实现数据库的连接
    结构类图
    在这里插入图片描述

    实现代码:

    模拟测试截图
    在这里插入图片描述

    第四题:建造者模式实现赛车的构建
    结构类图
    在这里插入图片描述

    实现代码:

    模拟测试截图
    在这里插入图片描述

    第五题:原型模式通过浅克隆和深克隆方法实现该简历复制功能
    结构类图
    在这里插入图片描述

    实现代码:

    模拟测试截图
    在这里插入图片描述

    第六题:单例模式设计虚拟用户生成器,使用饿汉式和双重检测
    结构类图
    在这里插入图片描述

    实现代码:

    模拟测试截图
    在这里插入图片描述
    详细的代码及操作

    展开全文
  • 结构型设计模式之桥接模式实验–开发一个跨平台视频播放器。 - 需要知道桥接模式的相关知识: 1.桥接模式是一种对象结构型模式,将抽象化部分与它的实现化部分分离,使它们都可以独立地变化。桥接模式将继承关系...

    结构型设计模式之桥接模式实验–开发一个跨平台视频播放器。

    - 需要知道桥接模式的相关知识:

    1.桥接模式是一种对象结构型模式,将抽象化部分与它的实现化部分分离,使它们都可以独立地变化。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。
    2、抽象化:抽象化就是忽略一些信息,把不同的实体当作同样的实体对待。在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽象化的过程。
    实现化:针对抽象化给出的具体实现,就是实现化,实现化产生的对象比抽象化更具体,是对抽象化事物的进一步具体化的产物。
    3、脱耦:桥接模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化。

    - 4、桥接模式包含如下角色(不包括测试类):
    (1)Abstraction:抽象类;
    (2)RefinedAbstraction:扩充抽象类;
    (3)Implementor:实现类接口;
    (4)ConcreteImplementor:具体实现类。
    (5)Client:客户端,外部使用程序;
    uml类图实验报告里要画上且如何画:在第一个实验—工厂模型里已经有如何绘制流程了,可以去再看看,只需要WPS就可无需下载其他软件!UML如何用WPS完成
    - 实验内容/实验目的:
    开发一个跨平台视频播放器,可以在不同操作系统平台(如:Windows、Linux、UNIX等)上播放多种格式的视频文件,常见的视频格式包括MPEG、RMVB、AVI、WMV等。现使用桥接模式设计该播放器。

    - 实现代码如下:

    1. VideoFile 定义视频文件,是一个接口类:
    package Practice02;
    
    public interface VideoFile {
    	public void decode(String osType, String fileName);
    }
    

    2.AVIFile类,视频格式类;

    package Practice02;
    
    public class AVIFile implements VideoFile {//实现VideoFile接口   
    	  public void decode(String osType, String fileName) {
    		 System.out.println("操作系统为:"+osType+",其视频文件格式是:"+fileName);
    	}
    }
    

    3.MPEGFile类,视频格式类;

    public class MPEGFile implements VideoFile {//实现VideoFile接口   
    		public void decode(String osType, String fileName) {
    			System.out.println("操作系统为:"+osType+",其视频文件格式是:"+fileName);
    	}
    }
    

    同理:RMVBFile 类(视频格式类)以及WMVFile 类(视频格式类)大家应该知道怎么编写了,照猫画虎即可…(要自己动手敲出来哦☺)

    4.OperatingSystemVersion抽象类,定义抽象方法,操作系统版本类:

    public abstract class OperatingSystemVersion {
    		protected VideoFile vf;
    
    		public void setVideoFile(VideoFile vf) {
    			this.vf = vf;     //this属性声明变量
    	}
    		public abstract void play(String fileName);
    }
    

    5.LinuxVersion 定义操作系统类并实现继承

    public class LinuxVersion extends OperatingSystemVersion {
    	public void play(String fileName) {
    		String osType = "Linux播放";
    		this.vf.decode(osType,fileName);
    	}
    }
    

    6.UnixVersion 定义操作系统类并实现继承

    public class UnixVersion extends OperatingSystemVersion {
    	public void play(String fileName) {
    		String osType = "UNIX播放";
    		this.vf.decode(osType,fileName);
    	}
    }
    

    7.同理:WindowsVersion (Windows操作系统版本)照猫画虎即可…(要自己动手敲出来哦☺)

    1. Client 测试类:
    package Practice02;
    
    public class Client {
    	public static void main(String args[]) {
    		VideoFile vf;  //声明变量
    		OperatingSystemVersion osType1 = new WindowsVersion();
    		vf = new MPEGFile();  //创建对象并赋值
    		//调用方法
    		osType1.setVideoFile(vf);  
    		osType1.play("MPEG");
    
    		OperatingSystemVersion osType2 = new LinuxVersion();
    		vf = new RMVBFile(); //创建对象并赋值
    		osType2.setVideoFile(vf); //调用方法
    		osType2.play("RMVB");
    		
    		OperatingSystemVersion osType3 = new UnixVersion();
    		vf = new AVIFile(); //创建对象并赋值
    		osType3.setVideoFile(vf); //调用方法
    		osType3.play("AVI");
    		
    		OperatingSystemVersion osType4 = new UnixVersion();
    		vf = new WMVFile();//创建对象并赋值
    		osType4.setVideoFile(vf);//调用方法
    		osType4.play("WMV");
    	}
    }
    

    最终运行结果如下:

    在这里插入图片描述

    • 注意:
      上边要自己敲出来的部分一定要敲出来,不然结果肯定运行错误,因为代码没有补充完整。套用即可~

    我们的小白菜市场 心里眼里欢迎你~~❤

    展开全文
  • 结构型设计模式之外观模式实验–给系统提供一个文件加密模块 对外观模式的理解: 在外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户端与子系统内部复杂性分隔开,使得客户端...

    结构型设计模式之外观模式实验–给系统提供一个文件加密模块

    • 对外观模式的理解:

    在外观模式中,一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户端与子系统内部复杂性分隔开,使得客户端只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。外观模式中所指的子系统是一个广义的概念,它可以使一个类,一个功能模块、系统的一个组成部分或者一个完整的系统。子系统通常是一些业务类,实现了一些具体的、独立的业务功能。由于在外观类中维持了对子系统对象的引用,客户端可以通过外观类来间接调用子系统对象的业务方法,而无需与子系统对象进行直接交互。在引入外观类之后,客户端代码变得非常简单。
    总之,外观模式,就是不让客户端知道子系统复杂的实现逻辑,减少客户类的所需处理对象的数目,并是子系统使用起来更加容易,让客户类和子系统实现松耦合的关系。

    • 实验目的:
      某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块。

    • UML类图自己动手画,此实验必备元素,绘制流程看我实验一:UML如何用WPS完成

    • 本实验实现代码如下:
      FileReader:文件读取类,充当子系统类,用于读取文件。

    package practice03;
    import java.io.*;
    
    public class FileReader {
    	public String Read(String fileNameSrc) {
    		System.out.println("读取文件,获取明文");
    		StringBuffer sb = new StringBuffer();   //创建一个新的变量
    		try {
    			FileInputStream inFs = new FileInputStream(fileNameSrc);
    			int data;
    			try {
    				while ((data = inFs.read()) != -1) {
    					sb = sb.append((char) data);
    				}
    				inFs.close(); //调用close方法
    				System.out.println(sb.toString());
    			} catch (IOException e) {
    				System.out.println("文件操作异常");
    			}
    		} catch (FileNotFoundException e) {
    			System.out.println("文件不存在异常");
    		}
    		return sb.toString();//调用toString方法将内容转化为字符串类型
    	}
    }
    

    CipherMachine:数据加密类,充当子系统类,用于实现加密。

    public class CipherMachine {
    
    	public String encrypt(String plainText) {
    		System.out.println("数据加密,将明文转换成密文");
    		String es = "";
    		for (int i = 0; i < plainText.length(); i++) {
    			String c = String.valueOf(plainText.charAt(i) % 7);
    			es += c;   //es+c=es;
    		}
    		System.out.println(es);
    		return es;
    	}
    }
    

    FileWriter:文件保存类,充当子系统类,用于保存文件,在加密时需要指定源文件路径(fileNamesRCSrc),和保存后目标文件路径及名称(fileNameDes)。

    import java.io.*;
    
    public class FileWriter {
    	public void write(String encryptStr, String fileNameDes) { //write方法里包含两个属性
    		System.out.println("保存密文,写入文件");
    		try {   //try...catch进行排查异常
    			FileOutputStream outFs = new FileOutputStream(fileNameDes);
    			outFs.write(encryptStr.getBytes());//调用getBytes方法得到一个操作系统默认的编码格式的字节数组
    			outFs.close();//调用close方法
    		} catch (FileNotFoundException e) {
    			System.out.println("文件不存在异常");
    
    		} catch (IOException e) {
    			System.out.println("文件操作异常");
    		}
    	}
    }
    

    EncryFacade:加密外观类,充当外观类。

    public class EncryFacade {
    	// 维持对其他对象的引用
    	private FileReader reader;
    	private CipherMachine cipher;
    	private FileWriter writer;
    	public EncryFacade() {
    		reader = new FileReader();
    		cipher = new CipherMachine();
    		writer = new FileWriter();
    	}
    	// 调用其他对象的业务方法
    	public void fileEncrypt(String fileNameSrc, String fileNameDes) {
    		String plainStr = reader.Read(fileNameSrc);
    		String encryptStr = cipher.encrypt(plainStr);
    		writer.write(encryptStr, fileNameDes);
    	}
    }
    

    Client:客户端测试类。

    package practice03;
    
    public class Client {
    	public static void main(String[] args) {  //main方法入口
    		EncryFacade ef = new EncryFacade();				 ef.fileEncrypt("D:\\eclipse\\test01\\one.txt","D:\\eclipse\\test01\\two.txt");	
    }
    }
    
    

    运行结果如下:
    在这里插入图片描述

    • 注意:
      -上边的那个路径代码是我的路径,那个是需要你们手动改变的哦!

    ok~~~小白菜市场,心里眼里全是你❤

    展开全文
  • 设计模式实验

    2015-01-21 16:25:14
    设计模式实验 刘伟 中南大学 软件学院 创建型模式 结构型模式 行为型模式
  • 熟练使用JAVA实现行为型设计模式-策略模式,理解设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。 二、实验内容 某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子...
  • 软件架构与设计模式实验报告 内有创建型 行为型 结构型三种结构
  •  加深对结构型设计模式的理解以及在开发中的实际应用能力。 二、实验内容  众所周知,开店的申请手续是很繁琐的。以个体工商户开一家小餐馆为例,首先要拿身份证原件及复印件到当地工商所登记名称,然后凭登记的...
  • 软件设计模式概述 2GoF 的 23 种设计模式 3UML中的类图及类图之间的关系 4开闭原则 5里氏替换原则 6依赖倒置原则 7单一职责原则 ...39结构型模式应用实验 40行为型模式应用实验 所有实验实验报告及代码
  • 设计模式——结构型模式之一 一、实验题目 电子商务网站常有这样的功能:发送消息通知,比如订货发货通知等,从业务上看,消息分为普通消息、加急消息和特急消息多种不同的消息类型,其业务处理是不一样的,比如...
  • 资源中包括7个实验的源代码和报告。源代码可运行,报告中包括实现类图。结构型设计模式:适配器模式 代理模式 桥接模式 装饰模式 组合模式 外观模式 享元模式
  • 介绍了GOF的23种设计模式的实验教学方法,包括创建型、结构型、行为型设计模式中的8个实验
  • 介绍了GOF的23种设计模式的实验教学方法,包括创建型、结构型、行为型设计模式中的8个实验
  • 设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。 2.实验结束后,对相关内容进行总结。 二、实验内容 1.模式应用场景说明 相信大家都看过罗老师买奶茶的情节,现实生活中也是一样,奶茶分为大杯中杯和小...
  • 设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点。 2.实验结束后,对相关内容进行总结。 二、实验内容 1.模式应用场景说明 现在喜欢上网的年轻人越来越多,而家里面的电脑满足不了玩游戏的性能,我们一般...
  • 实验上机十一 命令模式 实验上机目的 练习使用行为型设计模式 练习使用命令模式的设计思路 练习使用命令模式实现功能按钮与功能之间设置案例的实现 实验上机课时 2学时 实验上机环境 JDK1.8\Eclipse Mars 预备知识 1...
  • 这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

结构型设计模式实验