策略模式的簡單實踐

背景

為了實現(xiàn)一個根據(jù)選擇不同的模板進(jìn)模板內(nèi)容的替換

新建一個Content.java類,他包含了一個根據(jù)模板生成對應(yīng)的字符竄內(nèi)容的方法

package com.drink.admin.print.yly;

import com.drink.admin.print.TemplateData;

public interface Content {
    String generateContentByTemplate(TemplateData templateData);
}

新建一個模板的實現(xiàn)類 OneContent.java

package com.drink.admin.print.yly;

import com.drink.admin.print.TemplateData;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public class OneContent implements Content {

    @Override
    public String generateContentByTemplate(TemplateData templateData) {
        String ticketTemplateOne = "<FB><FW><FH><FS><center>${template.storeName}</center></FS></FH></FW></FB>\n" +
                "<FB><FW><FH><FS><center>#${template.orderTakeNo}</center></FS></FH></FW></FB>" + "\n" +
                "<FB><center>${template.storeAddress}</center></FB>\r";
        ticketTemplateOne += "<FB><FH><center>餐桌號:${template.orderTableCode}</center></FH></FB>";
        ticketTemplateOne +=
                "<FB>訂單號:${template.orderNo}\r下單時間:${template.orderTime}</FB>\n" +
                        "<center> ———————————————</center>" + "\r" +
                        "<FB>收貨人:</FB>${template.receiveName}\r\r" +
                        "<FB>收貨地址:</FB>${template.receiveAddress}\r\r" +
                        "<FB>電話號碼:</FB>${template.receivePhone}\r\r" +
                        "<center>…………………………………………</center>" + "\r${template.itemContent}\n\n" +
                        "<center>…………………………………………</center>" +
                        "<table><tr><td>包裝費</td><td></td><td>¥${template.packFee}</td></tr></table>\r" +
                        "<table><tr><td>配送費</td><td></td><td>¥${template.shipFee}</td></tr></table>\r" +
                        "<table><tr><td>優(yōu)惠券及活動</td><td></td><td>-¥${template.activityCouponPrice}</td></tr></table>\r" +
                        "<table><tr><td>合計</td><td>${template.countNumber}</td><td>¥${template.realPayPrice}</td></tr></table>\r" +
                        "備注: ${template.memo}\r" +
                        "<center>…………………………………………</center>" +
                        "<FB>實付金額</FB><table><tr><td></td><td>¥${template.realPayPrice}</td></tr></table>" +
                        "<center>…………………………………………</center>" +
                        "<QR>${template.kfQrcode}</QR>\r" +
                        "<FB><FS><center>如有問題請聯(lián)系客服</center></FS></FB><center>${template.storeTel}</center>";
        StringWriter result = new StringWriter();
        Map templateMap = new HashMap();
        templateMap.put("template", templateData);
        Template template = null;
        try {
            template = new Template("strTpl", ticketTemplateOne, new Configuration(new Version("2.3.23")));
            template.process(templateMap, result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result.toString();
    }
}

新建一個枚舉類,包含了所有的模板相關(guān)的信息PrintTemplateEnum.java

package com.drink.admin.print.yly.constant;

import com.drink.admin.print.yly.model.TemplateOneData;
import com.drink.admin.print.yly.model.TemplateTwoData;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import static com.drink.admin.print.yly.constant.YlyTemplate.*;


/**
 * @author xu
 */

public enum PrintTemplateEnum {
    /**
     * 模板一 打印小票
     */
    TEMPLATE_ONE(1, new OneContent());
    private Integer code;
    private Content content;

    PrintTemplateEnum(int code, Content content) {
        this.code = code;
        this.content = content;
    }

    public Integer getCode() {
        return code;
    }

    public Content getContent() {
        return content;
    }

}

測試調(diào)用

    public static void main(String[] args) {
        TemplateData templateData = new TemplateData();
        // 選中對應(yīng)的內(nèi)容
        for (PrintTemplateEnum value : PrintTemplateEnum.values()) {
            if (value.getCode().equals(1)) {
                Content content = value.getContent();
                String s = content.generateContentByTemplate(templateData);
                System.out.println(s);
            }
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容