代码片-策略模式+工厂模式

通过策略类实现不同场景的策略处理,通过工厂模式创建不同的策略对象

1. 策略实现接口、策略实现类

1.1 策略接口

/**
 * 策略接口
 */
public interface IWarnRule {
    public void warn();
}

1.2 策略实现类

/**
 * 防拆告警策略实现类
 */
public class AntiRemovalWarn implements IWarnRule {

    private static final Logger log = LoggerFactory.getLogger(LongStaticWarn.class);
    
    public AntiRemovalWarn() {
    }

    @Override
    public void warn() {
    	// TODO 防拆策略具体实现
	    log.info("防拆告警");
    }
}
/**
 * 围栏告警策略实现类
 */
public class FenceWarn implements IWarnRule {

    private static final Logger log = LoggerFactory.getLogger(LongStaticWarn.class);
    
    public FenceWarn() {
    }

    @Override
    public void warn() {
    	// TODO 围栏告警策略具体实现
	    log.info("围栏告警");
    }
}
/**
 * sos告警策略实现类
 */
public class SosWarn implements IWarnRule {

    private static final Logger log = LoggerFactory.getLogger(LongStaticWarn.class);
    
    public SosWarn() {
    }

    @Override
    public void warn() {
    	// TODO sos告警策略具体实现
	    log.info("sos告警");
    }
}

2. 工厂类

/**
 * 告警工厂
 */
public class WarnFactory {

    public static IWarnRule getSosWarn(Position tag, LocUwbUser uwbUser) {
        return new SosWarn(tag, uwbUser);
    }

    public static IWarnRule getAntiRemovalWarn(Position tag, LocUwbUser uwbUser) {
        return new AntiRemovalWarn(tag, uwbUser);
    }
    
    public static IWarnRule getFenceWarn(Position tag, LocUwbUser uwbUser) {
        return new FenceWarn(tag, uwbUser);
    }
}

3. 业务调用

    /* SOS告警 */
    IWarnRule sosWarn = null;
    if (type == 1) {
        sosWarn = WarnFactory.getSosWarn();/* sos告警 */
    } else if (type == 2) {
        sosWarn = WarnFactory.getAntiRemovalWarn();/* 防拆告警 */
    } else {
        sosWarn = WarnFactory.getFenceWarn();/* 围栏告警 */
    }
    sosWarn.warn();
posted @ 2022-05-31 12:08  niaonao  阅读(0)  评论(0)    收藏  举报  来源