Java适配器设计模式 与 String

适配器设计模式

适配器模式将某个类的接口转换成客户端期望的另一个接口表示

主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作

其别名为包装器(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.缺省适配器

使用一个类作为桥梁 连接 类和接口

例: 健身房中有 跑步机 卧推 哑铃等健身器材(不清楚哪种会被使用)

扫描二维码关注公众号,回复: 937690 查看本文章

     人选择健身器材使用(实现健身房)

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


猜你喜欢

转载自blog.csdn.net/lijock/article/details/80341619