一 适配器设计模式
1.适配器是什么?
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。
2.适配器分类
1.类适配器:
让没有关系的类或接口产生联系,可以扩展功能 .增加代码的复用性.
2.对象适配器
使用对象来连接 来扩展功能
3.缺省适配器
看一个充电器的例子:(类适配器)
public class Demo01 {
public static void main(String[] args) {
Target iphone6 = new IPhone6();
iphone6.connection();
// 使用适配器的类
Target iphone7 = new ListenAdapter();
iphone7.connection();
}
}
//
//
class IPhone7{
//听音乐的方法
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 ListenAdapter extends IPhone7 implements Target{
// 实现抽象方法
@Override
public void connection() {
System.out.println("使用转接头");
//调用父类的专有方法
super.listenMusic();
}
}
使用3.5mm接口听
使用转接头
直接使用充电口听
2.缺省适配器:
健身房(接口)
跑步机
史密斯架(卧推)
哑铃
public class Demo02 {
}
interface GYM {
// 跑步
public abstract void run();
//卧推
public abstract void woTui();
//哑铃
public abstract void yaLing();
}
// 使用一个类作为桥梁来连接 接口 与类
// 让适配器类来实现接口 -----空实现
//适配器类 只是对接口方法的空实现 ,不管具体怎么实现
// 不希望适配器类直接被实现
abstract class SportAdapter implements GYM{
@Override
public void run() {
}
@Override
public void woTui() {
}
@Override
public void yaLing() {
}
}
// 这时可以继承 适配器类
class DH extends SportAdapter{
// 重写适配器类的方法
@Override
public void run() {
System.out.println("跑步半小时");
}
@Override
public void woTui() {
System.out.println("卧推3小时");
}
}
二 字符串的常用操作
主要是学习系统类的写法:
学习系统类的目的: 学习系统的方法 如何使用
方法:
关键字(有无 static 修饰) 方法的调用方式.
返回值类型(给我返回一个什么结果)
方法名
参数列表(方法需要什么)
public class Demo01 {
public static void main(String[] args) {
//修改的是字符串的引用,实际上字符串并没有改变,改变的是地址.
//看方法时 拼接 截取 等字符串的操作方法时,都是返回一个新的字符串
String s1 = "abc";
s1 = "123";
System.out.println(s1);//123
//s2 的创建方式 相当于在方法区的常量池中创建一个字符串 (字符数组)
//s3 是在堆内存中开辟一块空间
String s2="abc";
String s3 = new String("abc");
String s4 = "abc";
// == 对象的话比的是地址
System.out.println(s2==s4);//true
// equals 把两个字符串 变成字符数组 比较
System.out.println(s2.equals(s4));//true
System.out.println(s2==s3);//false
//s2和s3 有什么区别
//s2是一个对象
// s3 有两个对象 分别是 "abc" 和new出来的对象
}
}
1.字符串的获取
根据索引获取字符串中的字符 charAt(int index)
根据字符获取其在字符串中的位置 indexOf (int ch)
String str = "dahai";
char c = str.charAt(3);
// 注意索引值不要越界
System.out.println(c); //a
// 获取索引
String s1 = "woshidahdai";
int index = s1.indexOf('o');
System.out.println(index);//1
// 从传入的索引 这一位开始查找
//[0.0,1.0) 留头不留尾
int index1 = s1.indexOf('d', 0);
System.out.println(index1);//5
int index2= s1.indexOf("ah");
System.out.println(index2);//6
2.字符串中的判断 返回的是Boolean值
1.判断是否包含这个字符串 contains(charSquenece s)
2.判断前缀, startsWith()
3.判断后缀 endsWith()
//字符串的判断
// 判断包含
String string = "woshidahai";
boolean rell=string.contains("dadiaohai");
System.out.println(rell);
//判断前缀,以什么开头
boolean rel2 = string.startsWith("w1");
System.out.println(rel2);//false
//判断后缀,以什么结尾
boolean rel3 = string.endsWith("i");
System.out.println(rel3);//true
// 判断两个字符串相等
boolean rel4 =string.equals("dahai");
System.out.println(rel4);
// 判断两个字符串忽略大小写相等
boolean rel5 = string.equalsIgnoreCase("WoshidahaI");
System.out.println(rel5);
//字符串转小写
String rel6 = string.toLowerCase();
System.out.println(rel6);
//字符串转大写
String rel7 = string.toUpperCase();
System.out.println(rel7);
}
3.字符串的替换 replace(oldvalue ,newvalue)
public static void fun() {
// 替换
String str = "河流,我是你的水源";
String s1= str.replace("你", "谁");
System.out.println(s1);
//替换字符串
String s2 = str.replace("河流", "大海");
System.out.println(s2);
}
4.字符串的分割 split()
public static void fun2() {
// 字符串分割 返回字符串类型的数组
String string = "wanglong.pengqian.liushnagkun";
String [] arr = string.split("\\."); // 转义字符
System.out.println(Arrays.toString(arr));//[wanglong, pengqian, liushnagkun]
//增强for循环 专为打印遍历
/* for (容器中数据类型 名字:遍历容器) {
表示数组中的每一个元素
}*/
for (String s:arr) {
System.out.println(s);
}
}
5.获取子串 substring()
public static void fun3() {
//获取子字符串 wanglong
String str1 = "woshidahai";
String str2 =str1.substring(3);
String str3 =str1.substring(3, 5);//包括start值 不包括end值[3,5) 留头不留尾
System.out.println(str2);
System.out.println(str3);
}
6.去空格 trim() 字符串比较
public static void fun4() {
//去空格
String str = " abc def ";
String s1 = str.trim();
System.out.println(s1);
//字符串比较
String str01 = "abcAB";
String str02 = "Ab";
//比较是一位一位的比较 字符不一样,就做差值返回
//相等返回零
//字符不一样时,按acill表 ,返回两个字符只差
// 长度不一样时,返回的是位数的差值
int compareTo = str02.compareTo(str01);
System.out.println(compareTo);
}
7.字符串 与字符数组的相互转化
public static void fun5() {
//把字符数组 转化为 字符串
char [] array = {'d','a','h','a','i'};
//直接使用构造方法
String string = new String(array);
System.out.println(string);//dahai
//把字符串转化为 字符数组
String ss = "dahai";
char[] cs = ss.toCharArray();
for (char c :cs) {
System.out.println(c);
}
}
8.判断字符串是否为空 拼接字符串
public static void fun6() {
//判断字符串是否为空
String string = "";
boolean rel = string.isEmpty();
System.out.println(rel);
//字符串拼接
String s1 = "da";
String s2 = "hai";
String s3 = s1+s2;
System.out.println(s3);
String s4 = s1.concat(s2).concat(s2);
System.out.println(s4);
}
9.基本数据类型转化为字符串
String v1 = String.valueOf(10);
int a = 10;
System.out.println(v1);
System.out.println(a);