1. 设计模式(重点)
概述:是一套经人反复使用的代码设计经验的总结
也可以理解为特定问题的特定的解决方案
好处:可读性更强,更容易复用
设计模式的归类,分三大类:(23种)
1.对象型模式:对象的创建方式;例如:单例,工厂模式等
2.结构型模式:组织结构的包装;例如:装饰者模式(处理流),代理模式等
3.行为型模式:对象的行为监听;例如:观察者模式等
1.1 工厂模式(重点)
概述:从工厂中根据需求,获取产品(对象)
两种工厂模式:1.静态工厂; 2.实例工厂
静态工厂使用:工厂类.静态方法 new 工厂对象.成员方法
class Factory{
public static Object getObject(Class clazz) throws InstantiationException, IllegalAccessException {
return clazz.newInstance();
}
}
//静态工厂+反射=增强灵活性与可维护性;且使得代码变为软编码模式(配置文件灵活变更)
//分析:Properties加载配置文件,根据输入的编号,得到value
Properties properties = new Properties();
properties.load(new FileInputStream("factory.properties"));
String className = properties.getProperty(num+""); //获取类名
Class clazz = Class.forName(className);
Object obj = Factory.getObject(clazz);
System.out.println(obj);
1.2 单例(重点)
单例:
目标:每次获取到的对象都是同一个对象
步骤:
1.通过静态方法返回对象
2.返回的对象是静态属性(静态属性只初始一份)
3.属性私有化
单例中的饿汉式---立即加载的模式
======================饿汉式=======================
class MySingle{
private MySingle() {}
private static MySingle single = new MySingle();
public static MySingle getInstance() {
return single; //饿汉式
}
}
====================懒汉式=======================
单例中的懒汉式---延时加载的模式
class MySingle{
private static MySingle single;
public static MySingle getInstance() {
if(single==null) { //单例懒汉式线程安全提高效率的写法
synchronized ("lock") {
if(single==null) {
System.out.println("实例化对象...");
single = new MySingle();
}
}
}
return single;
}
}
2.枚举(了解)
枚举:应用场景与状态值是一致的
在枚举中提供了多个常量值,可以更方便的使用这些常量值进行逻辑判断
选择:
1.如果状态值不多,直接选择静态常量
2.如果状态值很多,可以使用枚举更方便更安全地使用这些常量值
案例:通过状态值来判断性别
枚举的本质
1.继承Enum的终止类
2.里面的枚举值是静态常量
//枚举应用:
enum MyEnum{
//枚举值
S_MAN,S_WOMAN
}
@Deprecated //过期的注解,定义到类上,类过期;定义到方法上,方法过期
class MyClass{
@Deprecated
public void test() {
}
}
//@interface:标注该注解类中只能有属性
@interface Annotation{
//里面只能写属性
String name(); //定义属性未赋值
int age() default 30; //定义属性并赋值
}
public class Test1 {
public static final int SEX_MAN = 1;
public static final int SEX_WOMAN = 2;
public static void main(String[] args) {
/*int sex = Test1.SEX_MAN;
switch (sex) {
case Test1.SEX_MAN:
System.out.println("你选择的是男性");
break;
case Test1.SEX_WOMAN:
System.out.println("你选择的是女性");
break;
default:
System.out.println("您的输入有误~");
break;
}*/
MyEnum en = MyEnum.S_MAN;
switch (en) {
case S_MAN:
System.out.println("你选择的是男性");
break;
case S_WOMAN:
System.out.println("你选择的是女性");
break;
default:
System.out.println("您的输入有误~");
break;
}
}
}
浙公网安备 33010602011771号