单例模式和工厂模式


单例模式和工厂模式


一、单例模式

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

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.抽象工厂模式:有多个工厂,每个工厂都能生产多个产品,它们是一个品牌。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290870.html

(0)
上一篇 2022年10月11日
下一篇 2022年10月11日

相关推荐

发表回复

登录后才能评论