diff --git a/README.md b/README.md
index 521990d..7d27622 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-# AndroidCommonLib
+# AndroidComponentLib
Android component library
diff --git a/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/FileLogger.java b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/FileLogger.java
new file mode 100644
index 0000000..a945aa6
--- /dev/null
+++ b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/FileLogger.java
@@ -0,0 +1,35 @@
+package co.review.androidcommonlib.designmode.abstract_and_interface;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.logging.Level;
+
+/**
+ * 创建时间: 2020/01/16 15:33
+ * 作者: qiudengjiao
+ * 描述: 抽象类的子类:输出日志到文件
+ */
+public class FileLogger extends Logger {
+
+ private Writer fileWriter;
+
+ public FileLogger(String name, boolean enabled, Level minPermittedLevel, String filepath)
+ throws IOException {
+ super(name, enabled, minPermittedLevel);
+ this.fileWriter = new FileWriter(filepath);
+ }
+
+
+ @Override
+ protected void doLog(Level level, String message) {
+ // 格式化level和message,输出到日志文件
+ try {
+ fileWriter.write("");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/Logger.java b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/Logger.java
new file mode 100644
index 0000000..4b22f03
--- /dev/null
+++ b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/Logger.java
@@ -0,0 +1,31 @@
+package co.review.androidcommonlib.designmode.abstract_and_interface;
+
+import java.util.logging.Level;
+
+/**
+ * 创建时间: 2020/01/16 15:07
+ * 作者: qiudengjiao
+ * 描述: 抽象类练习
+ */
+public abstract class Logger {
+
+ private String name;
+ private boolean enabled;
+ private Level minPermittedLevel;
+
+ public Logger(String name, boolean enabled, Level minPermittedLevel) {
+ this.name = name;
+ this.enabled = enabled;
+ this.minPermittedLevel = minPermittedLevel;
+ }
+
+ public void log(Level level, String message) {
+ boolean loggable = enabled && (minPermittedLevel.intValue() <= level.intValue());
+ if (!loggable) return;
+ doLog(level, message);
+ }
+
+ protected abstract void doLog(Level level, String message);
+
+
+}
diff --git a/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueClient.java b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueClient.java
new file mode 100644
index 0000000..8cda70d
--- /dev/null
+++ b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueClient.java
@@ -0,0 +1,12 @@
+package co.review.androidcommonlib.designmode.abstract_and_interface;
+
+/**
+ * 创建时间: 2020/01/16 16:48
+ * 作者: qiudengjiao
+ * 描述:
+ */
+public class MessageQueueClient {
+
+ public void send(){}
+
+}
diff --git a/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueLogger.java b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueLogger.java
new file mode 100644
index 0000000..8e210fe
--- /dev/null
+++ b/app/src/main/java/co/review/androidcommonlib/designmode/abstract_and_interface/MessageQueueLogger.java
@@ -0,0 +1,25 @@
+package co.review.androidcommonlib.designmode.abstract_and_interface;
+
+import java.util.logging.Level;
+
+/**
+ * 创建时间: 2020/01/16 15:38
+ * 作者: qiudengjiao
+ * 描述: 抽象类的子类: 输出日志到消息中间件(比如kafka)
+ */
+public class MessageQueueLogger extends Logger {
+
+ private MessageQueueClient msgQueueClient;
+
+ public MessageQueueLogger(String name, boolean enabled, Level minPermittedLevel,
+ MessageQueueClient msgQueueClient) {
+ super(name, enabled, minPermittedLevel);
+ this.msgQueueClient = msgQueueClient;
+ }
+
+ @Override
+ protected void doLog(Level level, String message) {
+ // 格式化level和message,输出到消息中间件
+ msgQueueClient.send();
+ }
+}