一.单例设计模式
核心思想:在程序的运行中,无论如何创建,该类的对象始终保持有且只有一个。编写单例思路
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.构造方法
抽象:有
接口:没有