深入Java设计模式之策略模式
2023-09-11 14:20:01 时间
意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
public class ClientForLogTemplateDemo
{
public static void main(String[] args)
{
LogContext logContext = new LogContext();
logContext.log("记录日志");
logContext.log("再次记录日志");
}
}
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
public class DBLog extends LogStrategyTemplate {
protected void doLog(String logMessage) {
if (logMessage != null && logMessage.trim().length() > 5) {
int a = 5 / 0;
}
System.out.println("现在把 '" + logMessage + "' 记录到数据库中");
}
}
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
public class FileLog extends LogStrategyTemplate
{
protected void doLog(String logMessage)
{
System.out.println("现在把 '" + logMessage + "' 记录到文件中");
}
}
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
public class LogContext {
public void log(String logMessage) {
LogStrategy strategy = new DBLog();
try {
//这里进行了策略的选择吧try-catch变相当if else用了
strategy.log(logMessage);
} catch (Exception exception) {
strategy = new FileLog();
strategy.log(logMessage);
}
}
}
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
public interface LogStrategy
{
public void log(String logMessage);
}
package com.lzhsite.technology.designPattern.strategy.LogTemplateDemo;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public abstract class LogStrategyTemplate implements LogStrategy
{
public final void log(String logMessage)
{
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
logMessage = dateFormat.format(new Date()) + " 内容是:" + logMessage;
doLog(logMessage);
}
protected abstract void doLog(String logMessage);
}
相关文章
- 《Java设计模式》之接口模式
- Java描述设计模式(16):代理模式
- Java描述设计模式(14):解释器模式
- Java描述设计模式(12):外观模式
- Java描述设计模式(11):观察者模式
- Java描述设计模式(08):桥接模式
- Java描述设计模式(05):原型模式
- Java描述设计模式(04):抽象工厂模式
- 设计模式java——原型模式
- 设计模式java——迭代器模式
- 设计模式java——装饰模式
- 设计模式java——适配器模式
- 第七节:详细讲解Java中的日期,java.util.date
- 基于james3.0 的邮件系统(struts2.3.2 +spring3.0.1+jpa(hibernate3.6.5)实现)b/s模式--java邮件系统
- Tomcat 奔溃:java.lang.OutOfMemoryError: Java heap space
- 《Java 2D游戏编程入门》—— 1.7 全屏显示模式中的主动渲染
- Java IDEA中设置导入import java.xx.*和设置导入具体的import java.xx.yy;
- Error running 'dt-assets-monitor [clean]': Cannot run program "C:Program Files (x86)Javajdk1.8.0_73binjava.exe" (in directory "E:codedt-assets-monitor")
- Java 设计模式:代理、适配器、桥接、装饰、外观、享元、组合模式
- 浅析AES加密工作模式 EBC/CBC 模式了解及具体如何进行补位、AES加密报错java.security.InvalidAlgorithmParameterException: ECB mode cannot use IV处理
- 深入Java设计模式之命令模式
- 《Java设计模式》之装饰模式
- Java小白入门200例61之java中Date日期类型的大小比较
- Java-OO接口-DAO模式代码阅读及应用
- Java代理模式
- Java中java.util.Arrays参考指南