ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

单例模式和工厂模式

2022-10-11 14:43:06  阅读:257  来源: 互联网

标签:单例模式


单例模式和工厂模式


一、单例模式

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 举例:操作一个文件,应该用一个唯一的实例去操作。

1.懒汉式

当使用的时候再实例化,节省空间。 加上synchronized锁保证线程安全。

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

2.饿汉式

当加载类的时候就实例化,浪费空间。 不用加synchronized锁,效率更高。

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

二、工厂模式

工厂类模式设计的核心是:让“生产”和“产品”解耦。

1.简单工厂模式

工厂模式的主要解决的问题是,将原来分布在各个地方的对象创建过程单独抽离出来,交给工厂类负责创建。其他地方想要使用对象直接找工厂(即调用工厂的方法)获取对象。 优点: 1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。

public class TeaFactory {
          
   

    public ITea createTea(String type){
          
   
        ITea tea = null;
        if(type.equals("longjing")){
          
   
            tea = new LongjingTea();
        }else if(type.equals("biluochun")){
          
   
            tea = new BiluochunTea();
        }
        if(tea != null){
          
   
            tea.makeTea();
        }
        return tea;
    }
}


class Solution{
          
   
	public static void main(String[] args) {
          
   
        TeaFactory teaFactory = new TeaFactory();
        ITea tea = teaFactory.createTea("longjing");
    }
}

2.工厂方法模式

如果要创建的产品类型较多,且各个产品创建的过程不尽相同,则一个工厂类职责会变得越来越多,不符合单一职责原则。另外简单工厂也不符合开闭原则。要新增一种产品需要修改原来的工厂类。

工厂方法模式,创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

public interface ITeaFactory {
          
   

    // 生产茶叶
    public ITea createTea();
}
public class LongjingTeaFactory implements ITeaFactory{
          
   
    @Override
    public ITea createTea() {
          
   
        return new LongjingTea();
    }
}

public class BiluochunTeaFactory implements ITeaFactory{
          
   
    @Override
    public ITea createTea() {
          
   
        return new BiluochunTea();
    }
}
public class FactoryMethodTest {
          
   
    public static void main(String[] args) {
          
   
        ITeaFactory factory = new LongjingTeaFactory();
        factory.createTea();

        factory = new BiluochunTeaFactory();
        factory.createTea();
    }
}

3.抽象工厂模式

总结

1.简单工厂模式:一个工厂里可以生产所有产品,根据传入的参数选择生产哪种产品。 2.工厂模式:有多个工厂,每个工厂只生产一种产品。 3.抽象工厂模式:有多个工厂,每个工厂都能生产多个产品,它们是一个品牌。

标签:单例模式
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有