一、单例模式分为两种:

(1)饿汉式单例:在类加载阶段就创建了一个对象。

(2)懒汉式单例:用对对象的时候才会创建对象。(连载53中例子就是懒汉式)

饿汉式举例:


package com.bjpowernode.java_learning;

​

public class D54_1_HungtySingtonMode {

  public static void main(String[] args) {

    Customer54 c1 = Customer54.getCustomer54();

    Customer54 c2 = Customer54.getCustomer54();

    System.out.println(c1==c2);

  }

}

//饿汉式单例模式

class Customer54{

  private static Customer54 c = new Customer54();

  private Customer54() {}

  public static Customer54 getCustomer54(){

    return c;

  }

}

二、接口也是一种引用类型,可以等同看作类

1.如何定义接口,语法:


[修饰符] interface 接口名()

2.接口中只能出现:常量、抽象方法

3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的

4.接口中没有构造方法,无法被实例化

5.接口和接口之间可以多继承

6.一个类可以实现多个接口。(这里的”实现“可以等同看作”继承“)

7.一个非抽象的类实现接口,需要将接口中所有的方法“实现/重写/覆盖”

package com.bjpowernode.java_learning;

​

public interface D54_2_InterfaceExercise {

  public static final String SUCCESS = "sucess";

  public static final double PI = 3.1415926;

  //public static final在接口中是可以省略的,因为由于语法规则知道,只能是常量

  byte MAX_VALUE = 127;

  public abstract void m54();//抽象方法

  void test54();//这也是抽象方法,这里的public abstract也是可以省略的。原因同上

}

​

interface B54 {

  void m2();

}

interface C54{

  void m3();

}

interface D54{

  void m4();

}

interface E53 extends B54,C54,D54{

  void m5();

}

//implements是实现的意思

//由于类是单继承的,所以这里使用新的关键字implements来实现

class MyClass implements B54,C54{

  public void m2() {}//由于m2原来是抽象方法,这里我们新的类必须覆盖重写m2方法

  public void m3() {}

}

​

class F54 implements E54{

  public void m2() {}

  public void m3() {}

  public void m4() {}

  public void m5() {}

}

我们按照上面的七个语法进行了举例。

三、接口的作用(先看个例子吧,总结下次再说)

package com.bjpowernode.java_learning;

​

public interface D54_3_CustomerService {

  void logout();

}

package com.bjpowernode.java_learning;

​

public class D54_4_ImplementCustomer{

  public static void main(String[] args) {

    //以下程序面向接口去调用

    D54_3_CustomerService d1 = new D54_4_ImplementCustomerService();//多态

    d1.logout();//底层类,类型是接口,可以的是使用的接口中的方法,实际调用由于底层是类,所以实际用的类的方法

  }

}

class D54_4_ImplementCustomerService implements D54_3_CustomerService{

  //对接口中的抽象方法进行实现

  public void logout() {

    System.out.println("成功退出系统!");

  }

}

四、源码:

D54_1_HungtySingtonMode.java

D54_2_InterfaceExercise.java

D54_3_CustomerService.java

D54_4_ImplementCustomer.java

地址:

https://github.com/ruigege66/Java/blob/master/D54_1_HungtySingtonMode.java

https://github.com/ruigege66/Java/blob/master/D54_2_InterfaceExercise.java

https://github.com/ruigege66/Java/blob/master/D54_3_CustomerService.java

https://github.com/ruigege66/Java/blob/master/D54_4_ImplementCustomer.java

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Java连载54-两种单例模式、接口详解的更多相关文章

  1. 7、java实现的两种单例模式

    /* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public stat ...

  2. iOS同一项目多个Target的快速实现方法 - 两种使用场景详解

    我们项目中,默认建好是只有一个target的,但是,一些场景中,多target能帮助我们更好的使用项目. 场景1: 同一项目,一般会分不同环境:开发环境.测试环境.正式(生产)环境. 这就涉及到一个请 ...

  3. Android四大组件之服务的两种启动方式详解

    Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...

  4. Spark的两种核心Shuffle详解

    在 MapReduce 框架中, Shuffle 阶段是连接 Map 与 Reduce 之间的桥梁, Map 阶段通过 Shuffle 过程将数据输出到 Reduce 阶段中.由于 Shuffle 涉 ...

  5. servlet两种配置方法详解

     1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...

  6. python模块的导入的两种方式区别详解

    Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...

  7. apache两种工作模式详解

    prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请 ...

  8. UEFI与 Legacy BIOS两种启动模式详解

    (1). UEFI启动模式 与 legacy启动模式 legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种 ...

  9. Java集合【2】--iterator接口详解

    目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...

  10. Java连载58-静态内部类、成员内部类详解

    一.内部类的分类: (1)静态内部类(2)成员内部类(3)局部内部类(4)匿名内部类 二.静态内部类 1.静态内部类可以等同的看做是静态变量 内部类的重要作用:可以访问外部类中的私有数据 2.静态内部 ...

随机推荐

  1. Nginx(一)--nginx的初步认识及配置

    什么是Nginx 是一个高性能的反向代理服务器正向代理代理的是客户端反向代理代理的是服务端 Apache.Tomcat.Nginx 静态web服务器jsp/servlet服务器 tomcat 安装Ng ...

  2. 3年Java开发10面阿里、京东、拼多多

    拼多多 地点:2号线娄山关路地铁站(金虹桥国际中心) 环境:新的写字楼,环境很好,有种高大上的感觉.大厅进入后需要登记,然后进闸机.电梯是需要刷卡才能使用的.会议室都是用城市名称命名,例如杭州.香港等 ...

  3. React中setState学习总结

    react中setState方法到底是异步还是同步,其实这个是分在什么条件下是异步或者同步. 1.先来回顾一下react组件中改变state的几种方式: import React, { Compone ...

  4. python学习-caculator

    # 运算符操作# 算术运算符num_a = 100num_b = 5000 # 加法print(num_a + num_b)# 减法print(num_a - num_b)# 乘法 *print(nu ...

  5. Python 库打包分发、setup.py 编写、混合 C 扩展打包的简易指南(转载)

    转载自:http://blog.konghy.cn/2018/04/29/setup-dot-py/ Python 有非常丰富的第三方库可以使用,很多开发者会向 pypi 上提交自己的 Python ...

  6. Supermap/Cesium 开发心得----动态散点图(波纹点/涟漪点)

    在二维开发中,openlayers4 入门开发系列结合 echarts4 实现散点图,下图是GIS之家的效果图,那么在三维中,则可借助Entity来变相构造下图的效果. 思路: 构造实体ellipse ...

  7. Crow’s Foot Notation

    http://www2.cs.uregina.ca/~bernatja/crowsfoot.html Crow’s Foot Notation A number of data modeling te ...

  8. 计算机组成原理——输入输出(I/O)系统考研题

    (一)   I/O系统基本概念 (二)   外部设备 1.     输入设备:键盘.鼠标2.     输出设备:显示器.打印机3.     外存储器:硬盘存储器.磁盘阵列.光盘存储器 (三)   I/ ...

  9. spring security 原理+实战

    疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长+面试必备之 高并发基础书籍 [Netty Zookeeper Redis 高并发实战 ] 前言 Crazy ...

  10. Python类中的self的作用

    Python编写类的时候,每个函数第一个参数都是self.后来对Python越来越熟悉,再回头看self的概念,慢慢就明白了. 谷歌上有一段解释很到位,贴出来给大家: self represents ...