Java的单例设计,抽象类,模板,接口

1.单例设计

单例设计模式

核心思想:在重程序的运行中,该类的对象不管怎么创建 始终保持有且只有一个该类的对象      

单例可以进行传值


编写单例思路

1.不让外界创建对象(私有化构造方法)

2.自己类内部来创建这个对象(让设个对象只创建一次)

3.给类外部提供一个获取该对象的方法(相当于提供一个get方法)


扫描二维码关注公众号,回复: 1761034 查看本文章

如何写单例类

1.饿汉(只要该类被加载 就会在方法区的静态区中 创建本类的对象)

2.懒汉(延迟加载)(在类被加载的时候不会去创建对象, 只有调用了获取该类对象的方法的时候才会创建该类对象)

饿汉:

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 getInstance() {
		//判断当这个对象不存在的时候再创建
		if(singleL==null) {
			singleL=new SingleL();
		}
		return singleL;
	}
}

2.抽象类

关键字:abstract

可以修饰类   抽象类

可以修饰方法  抽象方法


抽象类有什么用?

核心:抽象类不能直接使用  只能使用抽象类的子类


 抽象类中有:

1.变量 常量

2.构造方法

3.抽象方法  成员方法


抽象方法:当你对这个方法描述的不是特清楚 把该方法声明成抽象方法

 注意:

 1.抽象方法没有方法的实现部分

 2.有抽象方法的类一定必须是抽象类 但是抽象类中不一定要有抽象方法

 3.抽象类不能直接创建对象

 4.强制子类重写父类的抽象方法

 5.使用多态的形式进行创建

public static void main(String[] args) {
	//创建一个动物对象
	//Animal animal=new Animal()   错误的
	
	//抽象类如何使用?
	//使用多态的创建方式  父类引用指向子类的对象
	Animal acat=new Cat();//多态的形式创建
	acat.speak();
}
}
abstract class Animal{
	//构造方法
	//为什么抽象类允许构造方法存在   继承的完整性
	public Animal(){
		System.out.println("我是无参");
	}
	//声明一个抽方法
	public abstract void speak();	
	
}
//抽象类子类
class Cat extends Animal{
	//子类重写父类的抽象方法
	@Override
	public void speak() {
		System.out.println("喵喵");
	}	

abstract关键字与那些关键字不能共存

final    不行  修饰抽象方法 方法不能被重写

private  不行  修饰抽象方法只能本类访问  抽象类强制子类去重写抽象方法 访问不到 就谈不到重写

static   不行  修饰抽象方法就能用类名去调用  抽象方法没有实现部分 不能直接调用


3.模板设计模式

abstract class LOStuydy{
		public void study() {
			System.out.println("报名缴费");
			//选择学科需要变化  声明一个方法
			//调用抽象方法
			chooseSubject();
			System.out.println("毕业找工作");
		
		}
		//声明抽象方法
		public abstract void chooseSubject();
		
	}

4.接口

interface 接口名{

 }

狭义:java中的接口 使用interface关键字来声明

广义:相当于一个规则 是需要遵守的


接口

1.只可以声明抽象方法(不准确)

2.可以声明变量

3.接口只能用来实现(不能继承)

4.接口中没有构造方法

5.接口只声明的变量默认是public static final的(默认公开的静态常量)

6.声明抽象方法时 默认是public abstract (可省略)

接口跟类一样 也会被翻译成.class文件


public static void main(String[] args) {
	//创建接口 使用多态的形式
	InterA a=new InterAImpl();
	a.fun();
	System.out.println(InterA.num);
}
}
//声明一个接口
interface InterA{
	//默认公开的静态常量
	public static final 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方法");
	}




猜你喜欢

转载自blog.csdn.net/cdd233333/article/details/80327824