单多例模式,枚举,正则,工厂模式
今日内容
第一章 单例模式
1.懒汉式
public class Dog {
private static Dog dog = null;
private Dog() {
}
public static synchronized Dog getDog() {
if (dog == null) {
dog = new Dog();
}
return dog;
}
}
public class Demo01DogTest {
public static void main(String[] args) {
System.out.println(Dog.getDog());
System.out.println(Dog.getDog());
System.out.println(Dog.getDog());
System.out.println(Dog.getDog());
System.out.println(Dog.getDog());
}
}
2.饿汉式
public class Cat {
private Cat() {
}
private static Cat cat = new Cat();
public static Cat getCat() {
return cat;
}
}
public class Demo02CatTest {
public static void main(String[] args) {
System.out.println(Cat.getCat());
System.out.println(Cat.getCat());
System.out.println(Cat.getCat());
System.out.println(Cat.getCat());
System.out.println(Cat.getCat());
}
}
第二章 多例模式
public class Person {
private Person() {
}
private static List<Person> list = new ArrayList<>();
static {
for (int i = 0; i < 3; i++) {
list.add(new Person());
}
}
public static Person getPerson() {
Random r = new Random();
int randomIndex = r.nextInt(list.size());
return list.get(randomIndex);
}
}
public class Demo01Test {
public static void main(String[] args) {
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
System.out.println(Person.getPerson());
}
}
第三章 枚举
public enum Gender {
BOY,
GIRL
}
public class Person {
private String name;
private Gender gender;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", gender=" + gender +
'}';
}
public Person() {
}
public Person(String name, Gender gender) {
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
}
public class Demo01Test {
public static void main(String[] args) {
Person p = new Person();
p.setName("张三");
p.setGender(Gender.BOY);
System.out.println(p);
}
}
第四章工厂模式
public class Demo01Test {
public static void main(String[] args) {
Car car = CarFactory.getCar("法拉利");
car.run();
}
}
public abstract class Car {
public abstract void run();
}
public class CarFactory {
public static Car getCar(String carName) {
if (carName.equals("法拉利")) {
return new FaLali();
} else if (carName.equals("奥拓")) {
return new AoTuo();
} else {
return null;
}
}
}
public class AoTuo extends Car{
@Override
public void run() {
System.out.println("奥拓在慢慢跑");
}
}
public class FaLali extends Car{
@Override
public void run() {
System.out.println("法拉利在快速的奔跑");
}
}
第五章正则表达式
1.正则表达式的使用
public class Demo01String {
public static void main(String[] args) {
String qq = "124959292";
boolean flag = qq.matches("[1-9][0-9]{4,11}");
System.out.println(flag);
String phone = "16885885";
boolean flag2 = phone.matches("1[35789][0-9]{9}");
System.out.println(flag2);
String email = "jags@126.com.cn.xxx";
boolean flag3 = email.matches("\\w+@\\w+(\\.\\w+)+");
System.out.println(flag3);
}
}
2.正则有关的方法
public class Demo02String {
public static void main(String[] args) {
String str = "aa bb cc dd";
String newStr = str.replaceAll("\\s+", "*");
System.out.println(newStr);
}
}
总结
一. 单例模式
要求某个类的对象只创建一个
懒汉式【后创建对象】
饿汉式【先创建对象】
二. 枚举
是多例的一种体现,
枚举的本质就是类,只不过里面每一个属性都是自身的对象
格式:
public enum 枚举名 {
属性, 属性
}
三. 工厂模式
将创建对象的操作交给工厂,我们只管去通过工厂获取对象。
四. 正则表达式
能看懂即可。
作用:用来验证一个字符串是否符合规则。
[abc]:表示a或者b或者c
[^abc]:表示除了a,b,c之外的字符。
[a-z]:表示a-z中的任意一个.
[A-Z]:表示A-Z中的任意一个.
[0-9]:表示0-9中的任意一个.
[a-zA-Z0-9]:表示匹配a-z,A-Z,0-9中的任意一个字符
[a-mp-x]:表示匹配a-m,p-x中的任意一个字符
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符: 空格 tab等等
\S 非空白字符
\w 单词字符: [a-zA-Z0-9_]
\W 非单词字符: [^a-zA-Z0-9_]
?:0次或1次
*:任意次
+:一次或多次
{n}:恰巧n次
{n,}:至少n次
{n,m}:n到m次