java基础--单例和模板设计模式、抽象类、接口

一.单例设计模式

核心思想:在程序的运行中,无论如何创建,该类的对象始终保持有且只有一个。
编写单例思路
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;
	}

二.抽象类

关键词:abstract
abstract修饰类 该类就是抽象类
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.构造方法
 抽象:有
 接口:没有
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值