改造工具类为单例模式

如何将一个工具类改为单例模式

遇到的问题:业务中需要将富文本转化为纯文本,于是搜到一个工具类如下

public class Html2Text extends HTMLEditorKit.ParserCallback{

    StringBuffer s;

    public void parse(String str) {

        try (InputStream iin = new ByteArrayInputStream(str.getBytes());
             Reader in = new InputStreamReader(iin);
        ){
            s = new StringBuffer();
            ParserDelegator delegator = new ParserDelegator();
            // the third parameter is TRUE to ignore charset directive
            delegator.parse(in, this, Boolean.TRUE);
        }catch (Exception e){
            log.error("Html2Text parse error",e);
        }
    }

    @Override
    public void handleText(char[] text, int pos) {
        s.append(text);
    }

    public String getText() {
        return s.toString();
    }

    public String getContent(String str) {
        this.parse(str);
        return this.getText();
    }
}

使用的时候,每次都 new Html2Text() 然后调用 getContent()方法。

这种又个弊端,每次都要新建一个实例,接口调用量大的时候比较耗性能。 于是想着,怎么能简单改造一下,改造成单例,避免重复创建对象。

脑子里想了面试时候用到的,懒汉模式,饿汉模式,双重检查锁。。。

来一起回忆一下

懒汉模式


public class Singleton2 {
 
       private volatile static Singleton2 singleton; // 5   volatile用来防止多线程下重排序
 
       private Singleton2() {
             System.out.println("懒汉式单例初始化!");
       }
       public static Singleton2 getInstance () {
             if(singleton ==null) { // 1
                   synchronized(Singleton2.class) { // 2
                   if(singleton == null) { // 3
                    singleton = new Singleton2(); //4
                   }}
             }
        return singleton;
       }
 

饿汉模式

package com.design.singleton;
 
/**
 * 饿汉单例模式
 */
public class EagerSingleton {
 
    private static final EagerSingleton eagerSingleton = new EagerSingleton();
 
    private EagerSingleton(){
 
    }
 
    public static EagerSingleton getInstance(){
        return eagerSingleton;
    }
}

我们以饿汉模式改造

@Slf4j
public class Html2Text extends HTMLEditorKit.ParserCallback{

    private static final Html2Text html2Text = new Html2Text();

    static StringBuffer s;

    public void parse(String str) {

        try (InputStream iin = new ByteArrayInputStream(str.getBytes());
             Reader in = new InputStreamReader(iin);
        ){
            s = new StringBuffer();
            ParserDelegator delegator = new ParserDelegator();
            // the third parameter is TRUE to ignore charset directive
            delegator.parse(in, this, Boolean.TRUE);
        }catch (Exception e){
            log.error("Html2Text parse error",e);
        }
    }

    @Override
    public void handleText(char[] text, int pos) {
        s.append(text);
    }

    public String getText() {
        return s.toString();
    }

    public static String getContent(String str) {
        html2Text.parse(str);
        return html2Text.getText();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值