结构图
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("保存部门");
}
}
特点, 职责单一, 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力, 这种耦合会导致脆弱的设计当变化发生时,设计会遭受到意想不到的破坏。