java 单例模式和工厂模式实例详解

单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例

私有的构造方法

指向自己实例的私有静态引用

以自己实例为返回值的静态的公有的方法

饿汉式单例

  public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
      return singleton;
    }
  }

懒汉式单例

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

工厂方法模式代码

 interface IProduct {
    public void productMethod();
  }
  class Product implements IProduct {
    public void productMethod() {
      System.out.println("产品");
    }
  }
  interface IFactory {
    public IProduct createProduct();
  }
  class Factory implements IFactory {
    public IProduct createProduct() {
      return new Product();
    }
  }
  public class Client {
    public static void main(String[] args) {
      IFactory factory = new Factory();
      IProduct prodect = factory.createProduct();
      prodect.productMethod();
    }
  }

抽象工厂模式代码

  interface IProduct1 {
    public void show();
  }
  interface IProduct2 {
    public void show();
  }
  class Product1 implements IProduct1 {
    public void show() {
      System.out.println("这是1型产品");
    }
  }
  class Product2 implements IProduct2 {
    public void show() {
      System.out.println("这是2型产品");
    }
  }
  interface IFactory {
    public IProduct1 createProduct1();
    public IProduct2 createProduct2();
  }
  class Factory implements IFactory{
    public IProduct1 createProduct1() {
      return new Product1();
    }
    public IProduct2 createProduct2() {
      return new Product2();
    }
  }
  public class Client {
    public static void main(String[] args){
      IFactory factory = new Factory();
      factory.createProduct1().show();
      factory.createProduct2().show();
    }
  }

希望本文对各位朋友有所帮助

(0)

相关推荐

  • Java单例模式实现静态内部类方法示例

    Singleton是众多设计模式中最容易理解的一种,也是众多设计模式中较为重要的一种设计模式.接下来我们看看具体介绍. Singleton模式实现的重点在于将构造函数私有化(private),并通过提供静态公有函数(public synchronized static xxx getInstance)来获取定义在类中的静态私有成员(private static xxx instance),通过一个简单的判断静态实例是否为空来控制这个类只能够new一次,即控制了一个类只能有单个实例,一般的实现如下

  • JAVA多线程并发下的单例模式应用

    单例模式应该是设计模式中比较简单的一个,也是非常常见的,但是在多线程并发的环境下使用却是不那么简单了,今天给大家分享一个我在开发过程中遇到的单例模式的应用. 首先我们先来看一下单例模式的定义: 一个类有且仅有一个实例,并且自行实例化向整个系统提供. 单例模式的要素: 1.私有的静态的实例对象 2.私有的构造函数(保证在该类外部,无法通过new的方式来创建对象实例) 3.公有的.静态的.访问该实例对象的方法 单例模式分为懒汉形和饿汉式 懒汉式: 应用刚启动的时候,并不创建实例,当外部调用该类的实例

  • java 单例模式的实例详解

    java 单例模式的实例详解 概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打

  • JAVA 枚举单例模式及源码分析的实例详解

    JAVA 枚举单例模式及源码分析的实例详解 单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点: 1.线程安全 2.不会因为序列化而产生新实例 3.防止反射攻击但是貌似没有一篇文章解释ENUM单例如何实现了上述三点,请高手解释一下这三点: 关于第一点线程安全,从反编译后的类源码中可以看出也是通过类加载机制保证的,应该是这样吧(解决) 关于第二点序列化问题,有一篇文章说枚举类自己实现了readResolve()方法,所以抗序列化,这个方法是当前类自己实现的(解决) 关于

  • java 单例模式(饿汉模式与懒汉模式)

    java 单例模式 饿汉式单例 对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象. 懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备.它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回. 单例设计模式常用于JDBC链接数据库 注意: 1 我们常用的是第一种饿汉式,因为: (1)既然采用了单例设计模式,就是为了使用单例类的对象

  • Java单例模式简单介绍

    一.概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案.就笔者认为,单例就是不让外界创建对象. 1.1概念剖析 对于单例的话,从上面的概念剖析,应该满足下面的几个条件: 第一:单例类中只能有一个单例对象: 第二:单例类必须自己创建自己的唯一实例对象: 第三:这个实例对象能够给外界访问到,

  • 详解java 单例模式及方法总结

    java设计模式--单例模式  单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰). (2) 在其内部产生该类的实例化对象,并将其封装成private static类型. (3) 定义一个静态方法返回该类的实例. /** * 方法一 * 单例模式的实现:饿汉式,线程安全 但效率比较低 */ pu

  • java设计模式之单例模式解析

    单例模式是最简单但同时也是很重要的一种设计模式,优点有以下几个方面: 1.当内存占用特别大的类需要频繁地创建销毁时,单例模式可以节省内存和提高性能,例如myBatis里面的sessionFactory 2.当需要对文件做单一读写时,例如同一时间只能同时写入一个windows文本文件,则需要用单例来避免多重读写 缺点是: 1.单例模式没有接口,很难对其进行拓展. 2.不利于测试,没办法直接根据接口mock出一个对象出来测试 最后说下其实现方式主要有饿汉模式和懒汉模式.其中懒汉模式又可以细分为几种,

  • java设计模式之单例模式的详解及优点

    java设计模式之单例模式 定义:如果一个类始终只能创建一个实例,那么这个类被称为单例类,这种设计模式被称为单例模式. Spring框架里面可以将所有生成的bean对象都设置为单例模式,只需要在配置Bean实例时指定scope="singleton"即可,或者不做配置默认即为单例模式. 我们可以创建一个小的Demo来演示单例模式的实现,只需要保证该类只能创建一个实例,我们可以用权限修饰符private修饰该类的构造器. 提供一个创建该类的接口,该接口只能用static修饰,类里面创建一

  • java 单例模式和工厂模式实例详解

    单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例. 私有的构造方法 指向自己实例的私有静态引用 以自己实例为返回值的静态的公有的方法 饿汉式单例 public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return singleton; } } 懒

  • java设计模式之工厂模式实例详解

    本文实例讲述了java设计模式之工厂模式.分享给大家供大家参考,具体如下: 工厂模式(factory) 涉及到4个角色:抽象工厂类角色,具体工厂类角色,抽象产品类角色和具体产品类角色. 抽象工厂类角色使用接口或者父类来描述工厂的行为, 具体工厂类角色负责创建某一类型的产品对象. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 工厂模式不同于静态工厂模式的地方: 工厂模式在工厂类也实现了多态,而不仅仅是在产品对象上实现多态. 它可以应对不同类型的产品对应一

  • Java设计模式之工厂模式案例详解

    目录 分类 案例 需求 方案一:简单工厂模式 方案二:工厂方法模式 方案三:抽象工厂模式 对比分析 总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,分别创建苹果味和香蕉味的蛋糕实例 方案一:简单工厂模式 定义蛋糕父类 /** * 蛋糕 * @author:liyajie * @createTime:2022/2/14 10:17 * @version:1.0 */ public class Cake { } 定义苹果味的蛋糕 /** * 苹果蛋糕

  • Java设计模式之监听器模式实例详解

    本文实例讲述了Java设计模式之监听器模式.分享给大家供大家参考,具体如下: 监听器模式有三个要素--事件源.事件对象.监听器. 事件源:顾名思义,事件发生的源头,比如点击的按钮,属于被监听的对象: 事件对象:这个经常和事件源混淆,它经常被用来包装事件源,切记,它毕竟是个事件,比如点击事件,和事件源的区别自己感受,木有栗子: 监听器:这个是监听器模式的核心,定义事件发生后的动作,通常事件对象作为监听器中定义的函数入参. 下面举个简单的栗子: 故事背景是,小明是个不讲卫生的孩子,他妈妈很担心他的健

  • Java设计模式之抽象工厂模式实例详解

    本文实例讲述了Java设计模式之抽象工厂模式.分享给大家供大家参考,具体如下: 具体工厂类:生产创建某一类具体产品对象. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 那么抽象工厂模式和工厂模式的不同之处呢? 其实最大的不同就在于,在产品类的结构更加复杂时,抽象工厂模式针对不同的产品族(就是一类产品对象)定义了不同的行为,也就是在父类或接口中,定义了不同的产生方法.不同的产品族调用各自的创建方法.同时不同的产品族横向比较,也有可归类的相同特征,这些特征

  • Java设计模式之桥接模式实例详解

    本文实例讲述了Java设计模式之桥接模式.分享给大家供大家参考,具体如下: 概念: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量. 什么情况下会用桥接模式? 简单的说就是我们在抽象对象的特征时,对象的特征属性又很抽象,不得不把属性再次抽象. 否则的话,具体子类的数量将会成几何增长,而且不易扩展.没办法维护现有代码. 举例,我们在抽象手机这二个对象时,它的几个属性,如

  • Java设计模式之建造者模式实例详解

    本文实例讲述了Java设计模式之建造者模式.分享给大家供大家参考,具体如下: 建造者模式(builder)可以将部件和其组装过程分开.一步一步创建一个复杂的对象. 用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节. 什么情况下会用到建造者模式? 个人理解,当我们创建的对象在创建时需要逻辑的时候. 比如,一个简单的pojo对象,我们想要创建,直接就可以new出来,没有什么逻辑. 当有一个复杂的对象,你想要创建它时,它的各个属性之间是有逻辑关系的. 一个属性赋值取值依赖于

  • Java面向接口编程之命令模式实例详解

    本文实例讲述了Java面向接口编程之命令模式.分享给大家供大家参考,具体如下: 一 点睛 某个方法需要完成某个行为,但这个行为的具体实现无法确定,必须等到执行该方法时才可以确定. 例如:假设有个方法需要遍历某个数组的数组元素,但无法确定在遍历数组时如何处理这些元素,需要在调用该方法时指定具体的处理行为. 对于这样一个需求,必须把处理行为作为参数传入该方法,这个处理行为用编程实现就是一段代码,可以考虑使用一个Command接口来定义一个方法,用这个方法来封装处理行为. 二 代码 1 Command

  • Python设计模式之简单工厂模式实例详解

    本文实例讲述了Python设计模式之简单工厂模式.分享给大家供大家参考,具体如下: 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' ''' 大话设计模式 用任意一种面向对象语言实现一个计算器控制台程序.要求输入两个数和运算符号,得到

  • java 迭代器模式实例详解

    java 迭代器模式实例详解 今天来818设计模式中的迭代器模式,也是java中Stack,List,Set等接口以及数组这个数据结构都会使用的一种模式. 首先,为什么使用迭代器模式,目的就是通过一个通用的迭代方法,隐藏stack,list,set以及数组中不同的遍历细节.也就是说,我不想让那些调用我的遍历容器的方法的人知道我到底是怎么一个一个的获取这些元素的(stack的pop,list的get,数组的array[i]),我只想让他知道他能 通过一个迭代器Iterator或者通过一个for e

随机推荐