1.单例设计
单例设计模式
核心思想:在重程序的运行中,该类的对象不管怎么创建 始终保持有且只有一个该类的对象
单例可以进行传值
编写单例思路
1.不让外界创建对象(私有化构造方法)
2.自己类内部来创建这个对象(让设个对象只创建一次)
3.给类外部提供一个获取该对象的方法(相当于提供一个get方法)
如何写单例类
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方法"); }