欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内部类、设计模式

程序员文章站 2024-01-24 09:22:34
...

局部内部类

等同于局部变量
注意:局部内部类在访问外部方法中的局部变量的时候,需要加final修饰;
从1.8开始final可以省略,但是final的作用仍然存在
局部内部类中,不能有静态声明;
如果是成员方法中的局部内部类,可以访问外部类的所有属性;
如果是静态方法中局部内部类,不可以直接访问外部类的成员属性;

匿名内部类

	指在方法调用时,实参需要传入某个接口对象的时候,不传入对象,传入一个匿名的实现类;
	如果方法定义形参 一般是个接口,那么调用的时候,就需要传入其实现类的对象
	但是可以不是实现这个接口,不传递实现类对象,传递一个匿名内部类,这个类没有名字,不能被复用;
	默认的匿名内部类类名:外部类类名$1 以此类推
	那么既然是没有名字的类,那么自然无法创建对象,但是传入匿名内部类的时候会自动创建一个对象;

设计模式

概述:代表最佳的实现方式;
前辈们开发总结的经验和教训,我们直接用避免了很多bug;
一套用来提高代码效率的,可维护性的实现方案;
目前已经有23种成熟的设计模式;

单例模式

	目的:是某个类仅创建一个对象;

实现思路:
首先要创建对象,对象由构造方法来创建,想要把创建对象的权力掌控在我们手中的话,那就不能让用户直接访问我们的构造方法
然后我们创建一个对象去实现。

实现步骤:
①构造方法私有化
首先要创建对象(控制权应当在我们手中)控制创建对象的数量;
构造方法是用来创建对象的,所以我们要控制构造方法;不能让用户访问构造方法;
如何实现?构造方法私有化,用户没有访问权限,自然就创建不了对象了。
②创建一个公共的静态方法,用来返回当前类对象且保证只实例化一次(创建一个对象)
我们应该创建一个对象给用户,如何传递?提供一个公共的方法,调用该方法返回一个对象;
那么这个方法应该是静态方法还是成员方法?
若是成员方法,需要创建对象去调用该方法,而我们现在需要的是用这个方法去调用对象,死循环;
所以应该是静态方法,用于获取对象,静态方法用类调用,保证实例化一次;
③创建一个私有化的静态变量,用于存储当前类的对象(变量的类型是当前类的类型)
此时,需要一个存储对象的变量,静态变量(与类的生命周期相关);
若是局部变量,每次调用都会初始化,即实例化对象;
若是成员变量,在静态的方法中不能直接的操作成员变量;
所以只能是静态变量,且该是私有化的静态变量;
应用场景:
举例:班级类中,如果只有一个讲师,其余都是学生;
那么讲师可以创建一个单例类;

根据对象不同的创建时机:
1.懒汉模式
第一次获取对象的时候,创建对象。
2.饿汉模式
静态变量在类加载阶段创建静态变量,这个静态变量保存了对象,相当于创建了对象。

工厂模式

把创建对象的语句单独的封装到一个类内,需要对象时,去工厂中获取;
把类之间的强依赖关系变弱,灵活度更高;
创建对象时,不会对客户端暴露创建逻辑;屏蔽掉产品的具体实现,调用者只关心产品的接口;
解耦:使耦合度降低,两者之间影响越小越好;

高内聚低耦合:通常指的是类之间的关系,是判断软件好坏的一个标准;
移植性增强;

硬代码:每次编译都需要改动源码;