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

作者:wuxiao5570 时间:2023-04-07 22:10:19 

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

私有的构造方法

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

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

饿汉式单例


 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();
   }
 }

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

来源:http://blog.csdn.net/wuxiao5570/article/details/70154159

标签:java,单例模式,工厂模式
0
投稿

猜你喜欢

  • Java 继承与多态超详细梳理

    2023-11-26 09:01:08
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    2021-10-13 04:59:39
  • 详解JAVA 弱引用

    2022-03-12 01:30:29
  • 学会IDEA REST Client后就可以丢掉postman了

    2023-11-10 15:32:56
  • Swagger注解-@ApiModel和@ApiModelProperty的用法

    2023-02-05 23:57:48
  • Android中调用另一个Activity并返回结果(选择头像功能为例)

    2022-09-08 23:43:10
  • Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)

    2023-02-26 10:45:41
  • Springboot 全局时间格式化操作

    2022-08-17 03:23:51
  • Java+opencv3.2.0实现人脸检测功能

    2022-11-27 10:36:42
  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    2023-07-10 07:24:59
  • java开发ServiceLoader实现机制及SPI应用

    2022-12-24 09:55:05
  • Java多线程同步工具类CyclicBarrier的使用

    2021-08-26 05:29:53
  • SpringFramework应用接入Apollo配置中心过程解析

    2021-08-30 09:03:50
  • Hibernate中的多表查询及抓取策略

    2022-02-22 18:58:28
  • 一次排查@CacheEvict注解失效的经历及解决

    2023-11-13 12:07:23
  • 在Spring Boot中使用Spring-data-jpa实现分页查询

    2023-12-03 21:35:39
  • Java集合之Set接口及其实现类精解

    2022-01-23 17:27:44
  • Unity游戏之存储数据

    2022-06-06 20:58:28
  • OpenGL ES实现光照效果(六)

    2022-06-30 16:08:52
  • C#中的静态成员、静态方法、静态类介绍

    2022-04-25 20:06:51
  • asp之家 软件编程 m.aspxhome.com