一.单例设计模式
核心思想:在程序的运行中,无论如何创建,该类的对象始终保持有且只有一个。编写单例思路
1.不让外界创建对象(构造方法私有化)
2.自己类内部来创建这个对象(让对象只创建一次)
3.给类外部 提供一个获取 该对象的方法(相当于提供一个get方法)
//饿汉式(只要该类被加载,就会在方法区的静态区中 创建本类的对象)
class SingleE{
//声明一个本类对象
private static SingleE singleE = new SingleE();
//构造方法私有化
private SingleE() {
}
//对外提供一个访问的方法(就是为了返回本类的对象)
public static SingleE getInstance() {
return singleE;
}
}
//懒汉式 (不完整 线程安全问题 双锁控制)(延迟加载)
//(只有当你调用了获取该类的方法时,才会创建对象)
class SingleL{
//声明一个对象的引用
private static SingleL singleL = null;
private SingleL(){
}
//获取对象的方法
public static SingleL getInstence() {
//当这个对象不存在的时候 再创建
if (singleL == null) {
singleL = new SingleL();
}
return singleL;
}
二.抽象类
关键词:abstractabstract修饰类 该类就是抽象类
abstract修饰方法 该方法就是抽象方法,抽象方法没有方法的实现部分
注意:1.有抽象方法的类一定是抽象类
2.但是抽象类中不一定要有抽象方法
3.抽象类不能直接创建对象
4.强制子类 重写父类抽象方法
5.使用多态的形式 进行创建
作用:抽象类不能直接使用 只能使用需要的抽象类的子类
抽象类中有
1.可以有变量 常量
2.可以有构造方法
3.可以有抽象方法和成员方法
abstract与final,private,static不能共存。
三.模板设计模式
public class Demo01 {
public static void main(String[] args) {
LOStudy hh = new HH() ;
hh.chooseSubject();
};
}
abstract class LOStudy{
//学习方法
public void study() {
System.out.println("报名缴费");
//选择学科是需要变化的 声明一个方法
//调用抽象方法
chooseSubject();
System.out.println("毕业找工作");
}
//声明抽象方法
public abstract void chooseSubject();
}
class HH extends LOStudy{
//重写抽象方法
@Override
public void chooseSubject() {
System.out.println("想学Java");
}
class YY extends LOStudy{
//重写抽象方法
@Override
public void chooseSubject() {
System.out.println("想学H5");
}
}
}
打印结果
想学Java
四.接口
1.什么是接口?
狭义:java中的接口
如何使用:interface关键词来声明
interface 接口名{
}
广义:相当于一个规则规范 是需要遵守的。
2.接口特点
1.只可以声明抽象方法(也可静态方法和默认方法)
2.可以声明变量
3.接口只能用来实现(不能继承)
4.接口中是没有构造方法的
5.接口中声明的变量默认是public static final
6.声明抽象方法时 默认是public abstract (可省略)
如何创建一个接口和接口的实现类
public class Demo03 {
public static void main(String[] args) {
//创建接口(使用多态形式创建)
InterA a = new InterAImpl();
a.fun();
System.out.println(InterA.num);
}
}
//声明一个接口
interface InterA{
int num = 10;
public abstract void fun();
}
//接口的实现类 使用implements关键词实现
//接口的实现类 类名 一般都以Impl结尾
class InterAImpl implements InterA{
//实现接口中的 抽象方法
@Override
public void fun() {
//num = 15;
System.out.println(num);
System.out.println("我是实现类的 fun方法");
}
}
打印结果
10
我是实现类的 fun方法
10
3.抽象类和接口的区别
1.使用方法抽象类:继承
接口:实现
2.成员变量
抽象类:可以是常量 变量
接口:只能是常量
3.成员方法
抽象类:可以是抽象方法,也可以是成员方法
接口:只能是抽象方法
4.构造方法
抽象:有
接口:没有