Java的设计模式以及抽象和接口的概念

单例设计模式(单实例)

核心:在程序运行当中,无论你怎么创建该对象,该对象有且只有一个存在
单例传值

写单例对象思路:

1.对象不能让用户来创建(不能在本类以外创建)
2.对象应该在类的内部来创建
3.开放一个让用户在类外面,能拿到对象的方法

分为饿汉式和懒汉式单例

饿汉式单例:不管使用不使用开放的方法,都会将这个单例对象创建出来

懒汉式单例(双锁):只有第一次调用开放的方法,单例对象才会创建出来(延迟创建)
区别:创建单例对象的时机不同

饿汉式例子

//  饿汉式
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;
}

}

抽象

  • 抽象:不知道该怎么具体描述该事物
  • 关键词:abstract
  • 修饰类 抽象类
  • 修饰方法 抽象方法

注意:

  • 1.抽象方法 没有实现部分
  • 2.抽象方法 必须在抽象类中 才能声明
  • 3.抽象类中 可以没有抽象方法
  • 4.抽象类 不能直接创建对象 可以使用多态的形式创建对象
  • 5.继承抽象类 子类必须实现 抽象类中的抽象方法
抽象类中可以有
  • 1.常量 变量
  • 2.抽象方法
  • 3.成员方法
  • 4.构造方法

思考

1.抽象类能不能创建对象?
答:不能
2.抽象类有没有构造方法?
答:有
3.抽象类该如何使用?

实例:
public static void main(String[] args) {
    Animal animal = new Cat();
    animal.eat();
    //  向下转型
    Cat cat = (Cat)animal;
    cat.zLs();
}
}

abstract class Animal{
//  声明抽象方法吃
public abstract void eat();

public Animal() {

} 
}
class Cat extends Animal{
//  实现抽象方法
public void eat() {
    System.out.println("猫吃鱼");
}

public void zLs() {
    System.out.println("抓老鼠");
}
}

注意:abstract 关键字不能与哪些关键字共存?

  • private 修饰抽象方法,子类不能实现,抽象方法没有意义
  • final 修饰成员方法,不能被重写,抽象方法没有意义
  • static 修饰抽象方法就可以直接使用类名调用,但是抽象方法没有实现部分

模板设计模式

  • 当你的程序大部分代码都相同,只有少部分需要修改时,可以使用模板设计模式(利用抽象类)

实例

abstract class SuDa{
//  学习
public void study() {
    System.out.println("报名缴费");
    //  选择学科
    chooseSubject();
    System.out.println("找工作");
}
//  抽象方法
public abstract void chooseSubject();
}

class CL extends SuDa{

public void chooseSubject() {
    System.out.println("H5");
}

}

class FZM extends SuDa{

public void chooseSubject() {
    System.out.println("JAVA");
}

}

接口

  • 狭义:
    使用关键字 interface 来定义接口
    格式: interface 接口名{ }

  • 广义:接口相对于一个规范,需要人来遵守

注意:
  • 1.使用接口时,不是用的继承,需要使用关键词 implements (实现)
  • 2.接口类不能直接创建对象
  • 3.接口类不能声明成员方法
  • 4.接口类不能声明构造方法
  • 5.使用多态的方式来创建对象

  • 接口可以写:
  • 1.只能写抽象方法,并且可以省略 public abstract 两个关键词
  • 2.只能写静态常量,并且省略 public static final 三个关键词
谨记:
  • 实现类的类名命名,后缀加Impl

猜你喜欢

转载自blog.csdn.net/guxin0729/article/details/82226895