Java编程开发常用的几种设计模式?

Java编程开发常用的几种设计模式?,第1张

随着我们对Java编程开发语言的掌握,对于不同场景下使用哪种设计模式会有更清晰的判断。下面IT培训就一起来了解一下,JavaScript编程中的几种常见设计模式都有哪些类型。

设计原则

单一职责原则(SRP)

一个对象或方法只做一件事情。如果一个方法承担了过多的职责,那么在需求的变迁过程中,需要改写这个方法的可能性就越大。

应该把对象或方法划分成较小的粒度

少知识原则(LKP)

一个软件实体应当尽可能少地与其他实体发生相互作用

应当尽量减少对象之间的交互。如果两个对象之间不必彼此直接通信,那么这两个对象就不要发生直接的相互联系,可以转交给三方进行处理

开放-封闭原则(OCP)

软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改

当需要改变一个程序的功能或者给这个程序增加新功能的时候,可以使用增加代码的方式,尽量避免改动程序的源代码,防止影响原系统的稳定

什么是设计模式

作者的这个说明解释得挺好

假设有一个空房间,我们要日复一日地往里面放一些东西。简单的办法当然是把这些东西直接扔进去,但是时间久了,就会发现很难从这个房子里找到自己想要的东西,要调整某几样东西的位置也不容易。所以在房间里做一些柜子也许是个更好的选择,虽然柜子会增加我们的成本,但它可以在维护阶段为我们带来好处。使用这些柜子存放东西的规则,或许就是一种模式

GZIP压缩格式简介在JDK API中 同样定义了多种类型用于创建和解除GZIP压缩格式数据文件的通用对象和方法 用于基于JDK编写GZIP压缩数据管理程序 GZIP压缩格式是在Sun Solaris *** 作系统中广泛采用的压缩数据格式 由于在数据压缩过程中可以采用多种类型的压缩算法 因此 压缩文件的压缩比很高 另外 在创建的压缩文件中 定义了用于表述时间和文件属主的时戳(Time Stamp) 可以使文件方便地在网络中传输和交换 GZIP压缩数据文件由一系列的数字构成 而各数字对应如下描述压缩文件信息的字段 ID 缺省值 用于标识GZIP压缩格式 ID 缺省值 用于标识GZIP压缩格式 CM 采用的压缩方法 其值为 ~ 是保留值 标识采用 deflate 压缩方法 FLG 用于标识各占用位的标志 MTIME 记录了最近修改时间 XFL 用于标识采用压缩算法的选项 OS 定义了 *** 作系统类型 XLEN 定义了附加信息段的长度 M 压缩文件说明信息 CRC 记录了CRC 算法采用的循环冗余校验值 上述信息完整描述了GZIP压缩格式数据 当然 基于JDK开发的压缩数据管理程序 不需要明确知道上述压缩数据定义格式 只需要创建相应的管理对象并调用这些对象中定义的方法即可 JDK API中ZIP压缩格式支持对象GZIP压缩格式是在JDK API中定义支持的另外一种数据压缩格式 由上面介绍的GZIP格式数据压缩方法可知 GZIP压缩格式具有更大的压缩比 因此 在Unix *** 作系统中 这种类型的数据压缩形式的应用十分普及 与JDK API对ZIP压缩格式的支持不同 在JDK API中 只定义了GZIPInputStream和GZIPOutputStream两种类型的流(Stream)对象 用于在基于流的数据传输过程中实现数据压缩 这两个对象的继承定义结构如下所示 java lang Object|+ java io InputStream|+ java io FilterInputStream|+ java util zip InflaterInputStream|+ java util zip GZIPInputStream(java util zip GZIPOutputStream)以采用GZIP格式进行数据输入处理GZIPInputStream对象为例 由上述对象的继承定义结构可以看出 该对象继承了InflaterInputStream流对象 需要说明的是 在ZIP压缩包中 定义了Inflater和Deflater两个对象 用于基于ZLIB压缩库实现多种格式的数据压缩和解压缩 因此 InflaterInputStream流对象的作用是采用ZLIB库作为数据压缩管理的引擎 而GZIPInputStream对象则进一步将流的数据加工进行细化 用于读取GZIP格式的压缩数据 同理 GZIPOutputStream对象用于创建GZIP格式的压缩数据文件 下面 将对两个对象的定义内容进行说明 ●GZIPInputStream对象定义结构 java util zip GZIPInputStream静态成员变量 protected CRC crc 用于说明采用的数据压缩算法为CRC protected boolean eos 说明输入流对象结束读取输入数据 构造方法 GZIPInputStream(InputStream in) 采用默认的缓冲区字节数创建输入流对象 GZIPInputStream(InputStream in int size) 创建由整数类型变量size指定缓冲区字节数的输入流对象 成员方法 该对象只定义了如下两个成员方法 void close() 关闭输入流对象 int read(byte[] buf int off int len) 读取输入流的数据到buf字节数组中 ●GZIPOutputStream对象定义结构 java util zip GZIPOutputStream静态成员变量 protected CRC crc 用于说明采用的数据压缩算法为CRC 构造方法 GZIPOutputStream(OutputStream out) 采用默认的缓冲区字节数创建输出流对象 GZIPOutputStream(OutputStream out int size) 创建由整数类型变量size指定缓冲区字节数的输出流对象 成员方法 void close() 关闭输出流对象 void finish() 结束数据输出 但不关闭输出流对象 void write(byte[] buf int off int len) 将字节数组buf中的内容压缩输出到输出流对象中 创建GZIP压缩格式文件实例经过前面对JDK API中创建GZIP压缩格式文件的相关对象的结构 成员方法定义形式的说明 读者一定会问如何应用这些对象和对象中定义的成员方法呢?请读者看下面的实例代码 //ZipDemo javaimport java io *import java util zip *public class GZIPDemo { public static void main(String[] args) { if (args length != ) { System out println("Usage:java GZIPDemo SourceFile DestnFile" + args length)System exit( )} try { int number//打开需压缩文件作为文件输入流 FileInputStream fin = new FileInputStream(args[ ])//建立压缩文件输出流FileOutputStream fout=new FileOutputStream(args[ ])//建立GZIP压缩输出流 GZIPOutputStream gzout=new GZIPOutputStream(fout)//设定读入缓冲区尺寸byte[] buf=new byte[ ]while ((number = fin read(buf)) != ) gzout write(buf number)gzout close()fout close()fin close()}catch(IOException e) { System out println(e)} } }上面的程序用于将命令行中指定的文件SourceFile进行压缩 创建GZIP格式的压缩文件DestnFile 在该程序的实现代码中 首先创建用于进行文件输入和输出的FileInputStream和FileOutputStream对象 并以FileOutputStream对象实例为参数创建GZIPOutputStream对象实例 从而为创建GZIP格式压缩文件建立数据流基础 在随后的代码中 利用FileInputStream对象中定义的read方法 从源文件中读取待压缩文件的内容 同时利用GZIPOutputStream对象中定义的write方法将压缩后的数据写出到输出文件中 从而实现数据文件的GZIP格式压缩处理 在Java中创建GZIP格式压缩文件的方法很简单 并且利用WinZip WinRAR等类型的压缩管理软件均能够打开创建的GZIP格式的压缩文件 那么 如何利用JDK API中定义的对象将被压缩的文件解压缩呢?请读者看下一节的内容 GZIP格式文件解压缩实例下面的程序用于将利用JDK API中定义对象的成员方法 将GZIP格式压缩文件进行解压缩 从而恢复压缩原始文件 //UnGZIPDemo javaimport java io *import java util zip *public class UnGZIPDemo { public static void main(String[] args) { if (args length != ) { System out println("Usage:java UnGZIPDemo GZIPFile DestnFile")System exit( )} try { int number//建立GZIP压缩文件输入流 FileInputStream fin=new FileInputStream(args[ ])//建立GZIP解压工作流 GZIPInputStream gzin=new GZIPInputStream(fin)//建立解压文件输出流 FileOutputStream fout=new FileOutputStream(args[ ])//设定读入缓冲区尺寸byte[] buf=new byte[ ]while ((nnumber=gzin read(buf buf length)) != ) fout write(buf nnumber)gzin close()fout close()fin close()}catch(IOException e) { System out println(e)} } }在GZIP格式压缩文件解压缩程序代码中 仍然首先创建FileInputStream和FileOutputStream对象 并基于创建的FileInputStream对象创建GZIPInputStream对象 在随后的代码中 调用GZIPInputStream对象中定义的read方法 在从压缩文件中读取数据内容并进行解压缩处理后 将解除压缩后的数据内容利用文件输出流对象进行输出 从而实现数据文件的解压缩处理 小 lishixinzhi/Article/program/Java/hx/201311/27034

下面是BankAccount类的代码:

public class BankAccount {

  private String name

  private double balance

  private int year

  private double rate = 0.01d

  public String getName() {

      return name

  }

  public void setName(String name) {

      this.name = name

  }

  public double getRate() {

      return rate

  }

  public void setRate(double rate) {

      this.rate = rate

  }

  public double getBalance() {

      return balance

  }

  public BankAccount() {

      this.balance = 10d

      this.year = 1

  }

  public BankAccount(double balance, int year) {

      this.balance = balance

      this.year = year

  }

  public void save(double balance, int year) {

      this.balance = this.balance + balance

      this.year = year

  }

  public void fetch(double balance) {

      this.balance = this.balance - balance

      this.year = 0

  }

  public double calcTotal() {

      return this.balance * this.rate * this.year + this.balance

  }

}

下面是BankTest类的代码:

public class BankTest {

  public static void main(String[] args) {

      BankAccount account = new BankAccount(1000d, 3)

      account.setName("Tom")

      account.save(2000d, 3)

      System.out.println("该账户的姓名:" + account.getName())

      System.out.println("该账户的存款额:" + account.getBalance())

      System.out.println("该账户的总金额:" + account.calcTotal())

  }

}

下面是运行结果:

麻烦您看一下,是否能够满足要求。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12122987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存