策略模式的简单实践

背景

为了实现一个根据选择不同的模板进模板内容的替换

新建一个Content.java类,他包含了一个根据模板生成对应的字符窜内容的方法

package com.drink.admin.print.yly;

import com.drink.admin.print.TemplateData;

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

新建一个模板的实现类 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 = "
${template.storeName}
\n" + "
#${template.orderTakeNo}
" + "\n" + "
${template.storeAddress}
\r"; ticketTemplateOne += "
餐桌号:${template.orderTableCode}
"; ticketTemplateOne += "订单号:${template.orderNo}\r下单时间:${template.orderTime}\n" + "
———————————————
" + "\r" + "收货人:${template.receiveName}\r\r" + "收货地址:${template.receiveAddress}\r\r" + "电话号码:${template.receivePhone}\r\r" + "
…………………………………………
" + "\r${template.itemContent}\n\n" + "
…………………………………………
" + "
包装费¥${template.packFee}
\r" + "
配送费¥${template.shipFee}
\r" + "
优惠券及活动-¥${template.activityCouponPrice}
\r" + "
合计${template.countNumber}¥${template.realPayPrice}
\r" + "备注: ${template.memo}\r" + "
…………………………………………
" + "实付金额
¥${template.realPayPrice}
" + "
…………………………………………
" + "${template.kfQrcode}\r" + "
如有问题请联系客服
${template.storeTel}
"; 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(); } }

新建一个枚举类,包含了所有的模板相关的信息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;
    }

}

测试调用

    public static void main(String[] args) {
        TemplateData templateData = new TemplateData();
        // 选中对应的内容
        for (PrintTemplateEnum value : PrintTemplateEnum.values()) {
            if (value.getCode().equals(1)) {
                Content content = value.getContent();
                String s = content.generateContentByTemplate(templateData);
                System.out.println(s);
            }
        }
    }

你可能感兴趣的:(策略模式的简单实践)