JavaSE--- 设计模式、JDK5.0新特性、JDK7.0新特性
2015-09-28 10:04
846 查看
12 扩展知识
12.1 设计模式
12.1.1 装饰设计模式
1. 概述
装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案。
2. 代码实现
例:计算出一段代码运行的时间。
GetTime.java
ForDemo.java
IODemo.java
GetTimeDemo.java
运行结果:
3. 优缺点
优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能。
缺点:正因为可以随意组合,所以就可能出现一些不合理的逻辑。
12.1.2 装饰设计模式
1. 概述
2. 代码实现
3. 优缺点
12.2 JDK5.0新特性
12.2.1 枚举
1. 概述
枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
回想单例设计模式:单例类是一个类只有一个实例,那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
2. 格式
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3…;
}
示例1:
最常见的枚举类:
带有带参构造方法的枚举类:
带有抽象方法的枚举类:
测试类:
运行结果:
注意事项:
1)定义枚举类要用关键字enum
2)所有枚举类都是Enum的子类
3)枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
4)枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
5)枚举类也可以有抽象方法,但是枚举项必须重写该方法
6)枚举在switch语句中的使用
运行结果:
12.3 JDK7.0新特性
1)二进制字面量
2)数字字面量可以出现下划线
3)switch 语句可以用字符串
4)泛型简化
5)异常的多个catch合并
6)ry-with-resources 语句
12.1 设计模式
12.1.1 装饰设计模式
1. 概述
装饰模式就是使用被装饰类的一个子类的实例,在客户端将这个子类的实例交给装饰类。是继承的替代方案。
2. 代码实现
例:计算出一段代码运行的时间。
GetTime.java
package cn.itcast_01; public abstract class GetTime { public long getTime() { long start = System.currentTimeMillis(); code(); long end = System.currentTimeMillis(); return end - start; } public abstract void code(); }
ForDemo.java
package cn.itcast_01; public class ForDemo extends GetTime { @Override public void code() { for(int x = 0;x<10000;x++){ System.out.println(x); } } }
IODemo.java
package cn.itcast_01; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class IODemo extends GetTime{ @Override public void code() { try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream("a.avi")); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("b.avi")); byte[] bys = new byte[1024]; int len = 0; while ((len = bis.read(bys)) != -1) { bos.write(bys, 0, len); } bos.close(); bis.close(); } catch (IOException e) { e.printStackTrace(); } } }
GetTimeDemo.java
package cn.itcast_01; public class GetTimeDemo { public static void main(String[] args) { // GetTime gt = new GetTime(); // System.out.println(gt.getTime() + "毫秒"); GetTime gt = new ForDemo(); System.out.println(gt.getTime() + "毫秒"); gt = new IODemo(); System.out.println(gt.getTime() + "毫秒"); } }
运行结果:
3. 优缺点
优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象的功能,并且可以随意的组合这些功能。
缺点:正因为可以随意组合,所以就可能出现一些不合理的逻辑。
12.1.2 装饰设计模式
1. 概述
2. 代码实现
3. 优缺点
12.2 JDK5.0新特性
12.2.1 枚举
1. 概述
枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
回想单例设计模式:单例类是一个类只有一个实例,那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
2. 格式
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3…;
}
示例1:
最常见的枚举类:
package cn.itcast_02; public enum Direction { FRONT,BEHIND,LEFT,RIGHT; }
带有带参构造方法的枚举类:
package cn.itcast_02; public enum Direction2{ FRONT("前"),BEHIND("后"),LEFT("左"),RIGHT("右"); private String name; private Direction2(String name){ this.name = name; } public String getName(){ return name; } }
带有抽象方法的枚举类:
package cn.itcast_02; public enum Direction3 { FRONT("前") { @Override public void show() { System.out.println("前"); } }, BEHIND("后") { @Override public void show() { System.out.println("后"); } }, LEFT("左") { @Override public void show() { System.out.println("左"); } }, RIGHT("右") { @Override public void show() { System.out.println("右"); } }; private String name; private Direction3(String name) { this.name = name; } public String getName() { return name; } public abstract void show(); }
测试类:
package cn.itcast_02; public class DirectionDemo { public static void main(String[] args) { Direction d = Direction.FRONT; System.out.println(d); System.out.println("--------"); Direction2 d2 = Direction2.FRONT; System.out.println(d2); System.out.println(d2.getName()); System.out.println("--------"); Direction3 d3 = Direction3.FRONT; System.out.println(d3); System.out.println(d3.getName()); d3.show(); } }
运行结果:
注意事项:
1)定义枚举类要用关键字enum
2)所有枚举类都是Enum的子类
3)枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
4)枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
5)枚举类也可以有抽象方法,但是枚举项必须重写该方法
6)枚举在switch语句中的使用
public class DirectionDemo { public static void main(String[] args) { Direction3 dd = Direction3.FRONT; dd = Direction3.LEFT; switch (dd) { case FRONT: System.out.println("你选择了前"); break; case BEHIND: System.out.println("你选择了后"); break; case LEFT: System.out.println("你选择了左"); break; case RIGHT: System.out.println("你选择了右"); break; } } }
运行结果:
12.3 JDK7.0新特性
1)二进制字面量
2)数字字面量可以出现下划线
3)switch 语句可以用字符串
4)泛型简化
5)异常的多个catch合并
6)ry-with-resources 语句
package cn.itcast_03; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; public class Demo { public static void main(String[] args) { // 二进制字面量 int x = 0b100101; System.out.println(x); // 数字字面量可以出现下划线 int y = 1_1234_1000; // 不能出现在进制标识和数值之间 // 不能出现在数值开头和结尾 // 不能出现在小数点旁边 // switch语句可以使用字符串 // 泛型简化 ArrayList<String> array = new ArrayList<>(); // 异常的多个cath合并 method(); } private static void method() { // try-with-resources 语句 // try(必须是java.lang.AutoCloseable的子类对象){…} try { FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); int ch = 0; while ((ch = fr.read()) != -1) { fw.write(ch); } fw.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } // 改进版的代码 try (FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt");) { int ch = 0; while ((ch = fr.read()) != -1) { fw.write(ch); } } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例