1.单例模型

有时候在我的设计中,所有的类只共享一个实例,那么这时候就需要设计一个单实例的类。

思路是将这个类构造器私有化,这样外部就无法直接创建对象,然后提供公有的静态方法,让外部去调用。具体的实现方式有四种方式

方式一:饿汉模式

public class Singleton {// 创建本类的私有构造方法private Singleton(){}private static Singleton singleton = new Singleton();public static Singleton getInstance(){return singleton;}
}

饿汉模式在类加载是就已经创建了类对象,不管是否使用该类的实例,它已经在堆内存里。

直接将该类的实例对象作为属性实现的

方式二:懒汉模式

 public static LazySingleton getInstance(){if(singleton == null){synchronized (LazySingleton.class){if(singleton == null){singleton = new LazySingleton();}}}return singleton;}

之所以成为懒汉模式,是相对于饿汉模式说,因为饿汉模式是你不管是不是使用这个类,都会产生这个类的实例,而懒汉模式是在getInstance()这个方法里面new出来的,所以只有调用这个方法,才会在堆内存种产生类实例。

通过双重检测 和 同步代码块synchronized{} 使得代码执行的高效和线程安全

方式三:通过枚举

public class EnumSingleton {private EnumSingleton(){}private static enum SinEnum{// 自定义的枚举值 如果没有该自定义枚举值 无法获取枚举对象TEST;private EnumSingleton es = new EnumSingleton();}public static EnumSingleton getInstance(){SinEnum sinEnum = SinEnum.TEST;return sinEnum.es;}
}

方式四:匿名内部内

/*** 通过静态内部类 完成单例模式的创建* 在外部类加载时,并不会加载内部类,也就是不会执行new 实例(),这属于懒加载* 只有第一次调用getInstance方法时,才会加载*/
public class InnerSingleton {private InnerSingleton(){}// 静态内部类private static class Inner{private static InnerSingleton instance = new InnerSingleton();}public static InnerSingleton getInstance(){return Inner.instance;}}

2.代理模式

把核心的业务抽象成一个接口,然后让被代理者抽象成一类去实现这个接口,代理者也抽象成一个类去实现这个接口,然后将被代理者类实例在代理者类中设计成为它的一个属性,然后代理者类就可以在实现的方法中,使用被代理的核心业务方法,同时可以加上一些非核心的业务。

请想像这样一个场景:你是一个租客,你需要租房子,那么你回去找房产中介帮你完成你的需求(租房子),

所以可以将租房子业务抽象成一个接口

public interface RentRoom {//核心业务:租房子public void rent();
}

租客类去实现这个接口

//租客
public class Renter implements RentRoom{public void rent() {System.out.println("租房子");}
}

中介类中也去实现租房的业务接口,把租客类实例作为自己的属性,因此可以直接使用租客类的核心业务方法,同时也可以加上一些非核心的业务逻辑,这样就可以让中介类完成租房子的业务。也就是通过调用中介类实例的renter方法

//房产中介
public class Agency implements RentRoom {private Renter renter =  new Renter();public void rent() {System.out.println("找房子");//这个是非核心业务,中介干的活renter.rent(); //这个是核心业务}}

java设计模式的几种体现方式相关推荐

  1. JAVA设计模式之3种工厂模式

    转自 JAVA设计模式之3种工厂模式 创建型模式 创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离.为了使软件的结构更加清晰,外 ...

  2. Java多线程的4种实现方式

    ** Java多线程的4种实现方式 ** 1:继承Thread并重写run方法,并调用start方法 /*** Java实现多线程的方式1* 继承Thread类,重写run方法* @author ho ...

  3. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  4. Java 内部类的四种实现方式

    Java 内部类的四种实现方式 前言 今天的话我将为大家介绍Java的四种内部类,他们分别是普通内部类,静态内部类,局部内部类,匿名内部类. 提示:以下是本篇文章正文内容,下面案例可供参考 一.内部类 ...

  5. java 设计模式 之 几种常见设计模式详解 demo

    1.单例模式 单例模式,它的定义就是确保某一个类只有一个实例,并且提供一个全局访问点. 单例模式具备典型的3个特点:1.只有一个实例. 2.自我实例化. 3.提供全局访问点. 因此当系统中只需要一个实 ...

  6. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

  7. Java设计模式:23种设计模式全面解析,墙都不扶就服你

    命令模式:将命令请求封装为一个对象,使得可以用不同的请求来进行参数化. 迭代器模式:一种遍历访问聚合对象中各个元素的方法,不暴露该对象的内部结构. 观察者模式:对象间的一对多的依赖关系. 仲裁者模式: ...

  8. Java多线程的11种创建方式以及纠正网上流传很久的一个谬误

    创建线程比较传统的方式是继承Thread类和实现Runnable,也可以用内部类,Lambda表达式,线程池,FutureTask等. 经常面试会问到继承Thread类和实现Runnable的区别,然 ...

  9. java 代理的三种实现方式

    Java 代理模式有如下几种实现方式: 1.静态代理. 2.JDK动态代理. 3.CGLIB动态代理. 示例,有一个打招呼的接口.分别有两个实现,说hello,和握手.代码如下. 接口: public ...

最新文章

  1. 小辣椒p60手机怎么样_小辣椒K30手机参数-小辣椒K30手机怎么样
  2. java IO 解析
  3. Starry Night [USACO]
  4. Go gin使用html模板
  5. python去除图片上的文字_Python图像处理之识别图像中的文字(实例讲解)
  6. C# partial 关键字的使用
  7. c语言火车票管理系统源代码2000行,C语言教务管理系统[2000行代码].doc
  8. 控制台打印三角形、菱形
  9. windows10 vscode 构建最强大的 Mingw C++ gcc 编译环境
  10. 为什么GEO2R/GEOquery的结果可能是错的?
  11. 小程序 长按api_微信小程序API相关知识科普
  12. Debug程序的使用
  13. NWT失败反省:谁给汝之权力,竟然敢要吾走人?
  14. 《Python 黑帽子》学习笔记 - 原书 netcat 代码分析 - Day 7
  15. uniapp调用高德api
  16. 华为AP 6050DN配置成家庭路由器
  17. nVidia的物理系统
  18. 要做研发高手,就是必须能看英文、写英文
  19. 小梅哥Xilinx FPGA学习笔记1——二选一多路器
  20. 【原创】C#搭建足球赛事资料库与预测平台(5) 赔率数据表设计1

热门文章

  1. 门磁传感器分类与工作原理
  2. 论文学习——考虑场次降雨年际变化特征的年径流总量控制率准确核算
  3. 绝命毒师第一季/全集Breaking Bad迅雷下载
  4. 抖音最常见的付费与免费推广渠道有哪些?3+6推广技巧干货!丨国仁网络
  5. etcd 介绍与使用
  6. Perforce Reconcile Offline Work 功能——P4V修改对应目录,自动checkout, add, delete。
  7. 计算机室维修制度,计算机教室多功能室制度
  8. 手机桌面上没有计算机,桌面上我的电脑图标没了怎么办
  9. 今天想起coos的秘密
  10. 揭秘MOS管和MOS管驱动电路之间的联系