设计模式(设计思想)
- 单例设计模式(单实例)
- 核心:在程序运行中 无论如何创建对象,该对象有且只有一个存在
写单例对象思路
- 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;
}
}
//调用这两个单例
SingleE s1 = SingleE.getInstance();
System.out.println(s1);
抽象类
抽象:
- 关键词 abstract
- 修饰类 抽象类
- 修饰方法 抽象方法
注意:
- 1.抽象方法 没有实现部分
- 2.抽象方法 必须在抽象类中 才能声明
- 3.抽象类中 可以没有抽象方法
- 4.抽象类中可以有 常量 变量 抽象方法 成员方法 构造方法
- 5.抽象类不能创建对象 可以使用多态的形式创建对象
6.继承抽象类 子类必须实现 抽象类中的抽象方法
例:abstract class Animal{ final int num = 10; //抽象方法 public abstract void eat(); //构造方法 public Animal() { System.out.println("抽象类构造方法"); } //成员方法 public void speak() { System.out.println("speak"); }} class Cat extends Animal{ //实现抽象方法 @Override public void eat() { // TODO Auto-generated method stub System.out.println("吃鱼"); } public void hit() { System.out.println("抓老鼠"); } }
public static void main(String[] args) {
Animal animal = new Cat();
animal.eat();
//向下转型
((Cat) animal).hit();
}
注意:
- abstract关键字与那些关键字 不能共存
- private 修饰 子类不能实现 抽象没有意义
- final 修饰 子类不能被重写 抽象没意义
- static 修饰抽象方法 就可以直接使用类名调用 但是抽象方法没有实现部分
接口
狭义:
- 使用关键字 interface 来定义接口
- interface 接口名{
-
- }
广义: 接口相当于一个规范 需要人来遵守
- 学生守则 保密协议 员工协议
- *
注意:1.使用借口时 不是用的继承
- 需要使用关键词 implement(实现)
- 2.接口类不能直接创建对象
- 3.接口类 不能声明成员方法
- 4.接口类 不能声明构造方法
- 5.使用多态的方式 创建对象
- *
接口可以写:
- 1.只能写抽象方法
- 并且可以省去 public abstract 两个关键字
- 2.只能写静态常量
- 并且可以省略 public static final三个关键词
例:
//声明一个接口(制定了一份规则)
interface InterA{
public static final int num = 10;//省略了public static final
//抽象方法
public abstract void fun();}
//实现接口
//规范: 实现类的类名 后缀 Impl
class InterAImpl implements InterA{
//实现接口中的抽象方法
@Override
public void fun() {
System.out.println("实现类的fun方法;
}}
//调用这个接口
public static void main(String[] args) {
//使用多态的形式来创建对象
InterA a = new InterAImpl();
a.fun();
}