适配器设计模式
适配器模式将某个类的接口转换成客户端期望的另一个接口表示
主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作
其别名为包装器(Wrapper)
1.类适配器
令没有关系的类和接口产生联系
可以扩展功能 增加已有代码的复用性
例: iphone7只有一个充电接口
iphone6有充电接口和3.5mm的耳机插口
iphone7 听音乐时需要转接口连接耳机
class Iphohe7 { public void listenMusic(){ System.out.println("直接使用充电接口") } } // 目标接口 interface Target { // 耳机连接的抽象方法 public abstract void connection(); } class Iphone6 implements Target{ // 实现抽象方法 @Override public void connection(){ System.out.println("使用3.5mm接口"); } } // 使用一个适配器类(第三方类) // 通过该类 使类和接口产生联系 提高接口的兼容性 class Adapter extends Iphone7 implements Target{ // 实现抽象方法 public void connection(){ System.out.println("使用转接口"); super.listenMusic(); } }
public static void main(String[] args) { Target iphone6 = new Iphone6(); iphone6.connection(); // 使用适配器的类 Target iphone7 = new Adapter(); iphone7.connection(); }
2.对象适配器
io 使用对象进行连接 来扩展功能
3.缺省适配器
使用一个类作为桥梁 连接 类和接口
例: 健身房中有 跑步机 卧推 哑铃等健身器材(不清楚哪种会被使用)
人选择健身器材使用(实现健身房)
interface JSF{ public abstract void paoBuJi(); public abstract void woTui(); public abstract void yaLing(); } // 使用一个适配器类(桥梁) 来实现接口 --- 空实现 // 只是对接口方法的空实现 不管具体怎么实现 // 不希望该适配器类 直接被使用 abstract class MyAdapter implements JSF { @Override public void paoBuJi() { } @Override public void woTui() { } @Override public void yaLing() { } } // 建立类 这时可以直接继承适配器类(桥梁) class Person extends MyAdapter { // 选择使用的器材 重写适配器类对应的方法 // 重写适配器类的方法 @Override public void paoBuJi() { System.out.println("跑步半小时"); } }
字符串类的系统方法
注意: 字符串是常量 程序运行当中不能被修改,被修改的是地址而不是字符串本身
String s1 = "lna"; s1 = "qwer"; // 修改的是 字符串引用(地址) // 指向不同的地址 字符串本身是常量不能被修改
字符串的系统方法 如 拼接 截取 等修改字符串的一类方法中
都有一个返回值 都是返回一个新的字符串(本身无法修改)
String s2 = "abc"; // 在方法区的常量池中 创建一个字符串
String s3 = new String("abc"); // 在堆内存中 开辟一块空间
s2和s3的区别:
s2是一个对象 而 s3是两个对象 "abc"和new出来的对象
String s4 = "abc"; System.out.println(s2 == s4); // true // 此处 s2和s4比较的是地址 System.out.println(s2.equals(s4)); // true System.out.println(s2 == s3); // false // equals 把两个字符串 变成字符数组 一位一位的进行比较注意: "=="号 两个对象比较的是地址 不是对象的话,比较的是值
string类中的获取方法:
根据索引 获取字符串中的字符(返回char型)
返回值类型char 方法 .charAt(int index);
String s1 = "asdfghjkl"; char c = string.charAt(5); System.out.println(c); // h
根据字符 获取字符在字符串中的下标
返回值类型int 方法 .indexOf('char');
String s1 = "qwertyuiop"; int index = s1.indexOf('t'); System.out.println(index); // 4
从传入索引的一位开始查找字符的下标 (留头不留尾原则)
返回值类型int 方法 .indexOf('char',int);
int index1 = s1.indexOf('g',4); System.out.println(index1); // 4
传入一个字符串 查找对应角标
返回值类型int 方法 .indexOf(string);
int index2 = s1.indexOf("yuio"); System.out.println(index2); // 5
string类中的判断方法:
返回布尔值类型
判断 包含关系、前缀和后缀
String string = "www.baidu.com"; // 判断包含 boolean rel1 = string.contains("www"); System.out.println(rel1); // 判断前缀 boolean rel2 = string.startsWith("www"); System.out.println(rel2); // 判断后缀 boolean rel3 = string.endsWith("com"); System.out.println(rel3);
判断两个字符串相等
返回值类型boolean 方法 .equals(string);
boolean rel4 = string.equals("haha"); System.out.println(rel4);判断两个字符串相等(忽略大小写)
返回值类型boolean 方法 .equalsIgnoreCase(string);
boolean rel5 = string.equalsIgnoreCase("WwW.BAIDU.com"); System.out.println(rel5);
字符串转大小写
// 字符串转小写 String s1 = string.toLowerCase(); System.out.println(s1); // 字符串转大写 String s2 = string.toUpperCase(); System.out.println(s2);
替换方法
返回值类型string 方法 .replace(string,string);
String string = "qwerty"; String s1 = string.replace('w', 'l'); System.out.println(s1); // qlerty
// 替换字符串 String s2 = string.replace("wer", "aaa"); System.out.println(s2);
切割方法
返回值类型 string[] 方法 .split("");
String string = "qwerty.asdfgh.zxcvbn"; // 正则表达式 使用转译符 String[] arr = string.split("\\."); // 正则表达式 System.out.println(Arrays.toString(arr)); // 增强for循环(专门用来遍历打印) // for(容器中数据的类型 名字:遍历容器) { } for(String a:arr) { // String a 表示 容器中的每一个元素 System.out.println(a); }
增强for循环(专门用来遍历打印)
for(容器中数据的类型 名字:遍历容器) { }
获取子字符串方法
截取 返回值类型 string 方法 .substring(int);
String string = "qwertyuiop"; // 从传入的索引这一位开始截取(包括3) String s1 = string.substring(3); System.out.println(s1); // rtyuiop // 留头不留尾 String s2 = string.substring(4,8); System.out.println(s2); tyui
去空格方法
返回值类型 string 方法 .trim();
String string = " abc def "; String s1 = string.trim(); System.out.println(s1); // "abc def"
注意: 只能去掉两头的空格 中间的不变
比较方法
返回值类型 int 方法 .compareTo(string);
注意: 前面的字符串跟后面调用的比较
相等返回 0
返回正数 前面大
返回负数 前面小
字符串不一样时 按ASCII码表 返回两个字符的差值
长度不一样 返回的是 位数的差值
一位一位进行比较 字符不一样 就做差值
String s2 = "abcAB"; String s3 = "Ab"; int num = s2.compareTo(s3); System.out.println(num);
字符数组与字符串的相互转化方法
char[] array = {'q','w','e','r','t'};
// 直接使用构造方法
String string = new String(array);
System.out.println(string);
String str = string.valueOf();
把字符串 转化为 字符数组
返回值类型char[] 方法 .toCharArray();
String str = "qwerty"; char[] arr = str.toCharArray(); for(char c : arr) { System.out.println(c); }
判断字符串是否为空
方法 .isEmpty();
String string = ""; boolean rel = string.isEmpty(); System.out.println(rel);
字符串拼接方法
方法 .concat(string);
// 连接符拼接 String s1 = "qwer"; String s2 = "asdfg"; String s3 = s1 + s2; System.out.println(s3); // 字符串拼接方法 String s4 = s3.concat(s2).concat("666"); System.out.println(s4);
基本数据类型转化为字符串方法
方法 .valueOf();
char[] c = {'c','v','b','n'}; String string = String.valueOf(c); System.out.println(string); // cvbn