策略模式(Strategy)

结构图

结构图

ILogStategy.java
public interface ILogStategy {
    void log(String content);
}
LogToDb.java
public class LogToDb implements ILogStategy {
    @Override
    public void log(String content) {
        System.out.println("日志记录到数据库,内容:"+content);
    }
}
LogToFile.java
public class LogToFile implements ILogStategy {
    @Override
    public void log(String content) {
        System.out.println("记录到文件,内容:"+content);
    }
}
LogContext.java
public abstract class LogContext {

    ILogStategy iLogStategy;

    public void setiLogStategy(ILogStategy iLogStategy) {
        this.iLogStategy = iLogStategy;
    }

    public void log(String content){
        this.iLogStategy.log(content);
    }

    public abstract void display();
}
LogContextDb.java
public class LogContextDb extends LogContext {

    public LogContextDb(){
        super.setiLogStategy(new LogToDb());
    }

    @Override
    public void display() {
        System.out.println("日志保存到数据库");
    }
}
LogContextFile.java
public class LogContextFile extends LogContext {

    public LogContextFile(){
        super.setiLogStategy(new LogToFile());
    }

    @Override
    public void display() {
        System.out.println("保存到文件");
    }
}
Test.java
public class Test {

    public static void main(String[] args) {

        //客户端指定的形式
        /*LogContext context = new LogContextImpl(new LogToDb());
        context.log("保存用户");

        new LogContextImpl(new LogToDb()).log("保存部门");*/

        LogContext toDb = new LogContextDb();
        toDb.display();
        toDb.log("###保存用户");
        toDb.log("###测试日志内容");

        LogContext toFile = new LogContextFile();
        toFile.display();
        toFile.log("保存部门");
    }
}

特点, 职责单一, 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力, 这种耦合会导致脆弱的设计当变化发生时,设计会遭受到意想不到的破坏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值