内部类、设计模式
局部内部类
等同于局部变量
注意:局部内部类在访问外部方法中的局部变量的时候,需要加final修饰;
从1.8开始final可以省略,但是final的作用仍然存在
局部内部类中,不能有静态声明;
如果是成员方法中的局部内部类,可以访问外部类的所有属性;
如果是静态方法中局部内部类,不可以直接访问外部类的成员属性;
匿名内部类
指在方法调用时,实参需要传入某个接口对象的时候,不传入对象,传入一个匿名的实现类;
如果方法定义形参 一般是个接口,那么调用的时候,就需要传入其实现类的对象
但是可以不是实现这个接口,不传递实现类对象,传递一个匿名内部类,这个类没有名字,不能被复用;
默认的匿名内部类类名:外部类类名$1 以此类推
那么既然是没有名字的类,那么自然无法创建对象,但是传入匿名内部类的时候会自动创建一个对象;
设计模式
概述:代表最佳的实现方式;
前辈们开发总结的经验和教训,我们直接用避免了很多bug;
一套用来提高代码效率的,可维护性的实现方案;
目前已经有23种成熟的设计模式;
单例模式
目的:是某个类仅创建一个对象;
实现思路:
首先要创建对象,对象由构造方法来创建,想要把创建对象的权力掌控在我们手中的话,那就不能让用户直接访问我们的构造方法
然后我们创建一个对象去实现。
实现步骤:
①构造方法私有化
首先要创建对象(控制权应当在我们手中)控制创建对象的数量;
构造方法是用来创建对象的,所以我们要控制构造方法;不能让用户访问构造方法;
如何实现?构造方法私有化,用户没有访问权限,自然就创建不了对象了。
②创建一个公共的静态方法,用来返回当前类对象且保证只实例化一次(创建一个对象)
我们应该创建一个对象给用户,如何传递?提供一个公共的方法,调用该方法返回一个对象;
那么这个方法应该是静态方法还是成员方法?
若是成员方法,需要创建对象去调用该方法,而我们现在需要的是用这个方法去调用对象,死循环;
所以应该是静态方法,用于获取对象,静态方法用类调用,保证实例化一次;
③创建一个私有化的静态变量,用于存储当前类的对象(变量的类型是当前类的类型)
此时,需要一个存储对象的变量,静态变量(与类的生命周期相关);
若是局部变量,每次调用都会初始化,即实例化对象;
若是成员变量,在静态的方法中不能直接的操作成员变量;
所以只能是静态变量,且该是私有化的静态变量;
应用场景:
举例:班级类中,如果只有一个讲师,其余都是学生;
那么讲师可以创建一个单例类;
根据对象不同的创建时机:
1.懒汉模式
第一次获取对象的时候,创建对象。
2.饿汉模式
静态变量在类加载阶段创建静态变量,这个静态变量保存了对象,相当于创建了对象。
工厂模式
把创建对象的语句单独的封装到一个类内,需要对象时,去工厂中获取;
把类之间的强依赖关系变弱,灵活度更高;
创建对象时,不会对客户端暴露创建逻辑;屏蔽掉产品的具体实现,调用者只关心产品的接口;
解耦:使耦合度降低,两者之间影响越小越好;
高内聚低耦合:通常指的是类之间的关系,是判断软件好坏的一个标准;
移植性增强;
硬代码:每次编译都需要改动源码;
上一篇: 设计模式-单例模式改进