diff --git a/.gitignore b/.gitignore
index 19ee72f..892a5d3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
.gitignore
build/
.settings/*
+.idea
diff --git a/JavaCodeAcc.iml b/JavaCodeAcc.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/JavaCodeAcc.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 0b311fc..7b6b0e0 100644
--- a/README.md
+++ b/README.md
@@ -47,7 +47,3 @@ Java代码积累:**[并发](./README.md/#concurrency) [设计模式](./README.
## basic
- [正则表达式使用方式](./src/basic/UsingRegex.java)
-
-## 如果有帮到你,欢迎随意打赏,感谢~
-
-
diff --git a/alipay.JPG b/alipay.JPG
deleted file mode 100644
index 714155f..0000000
Binary files a/alipay.JPG and /dev/null differ
diff --git a/src/designpattern/factory/simple/Operation.java b/src/designpattern/factory/Operation.java
similarity index 71%
rename from src/designpattern/factory/simple/Operation.java
rename to src/designpattern/factory/Operation.java
index 629fb67..144f2d9 100644
--- a/src/designpattern/factory/simple/Operation.java
+++ b/src/designpattern/factory/Operation.java
@@ -1,14 +1,13 @@
-package designpattern.factory.simple;
+package designpattern.factory;
/**
* 操作类抽象类
- *
- * @author liu yuning
*
+ * @author liu yunings
*/
public abstract class Operation {
public double numberA;
public double numberB;
-
+
public abstract double result();
}
diff --git a/src/designpattern/factory/abstraction/Client.java b/src/designpattern/factory/abstraction/Client.java
index 41ffec2..768e8cd 100644
--- a/src/designpattern/factory/abstraction/Client.java
+++ b/src/designpattern/factory/abstraction/Client.java
@@ -1,21 +1,20 @@
package designpattern.factory.abstraction;
-import designpattern.factory.simple.Operation;
+import designpattern.factory.Operation;
/**
* 客户端
- *
- * @author liu yuning
*
+ * @author liu yuning
*/
public class Client {
public static void main(String[] args) throws InstantiationException,
- IllegalAccessException {
- Operation operation = OperationFactory.createOperation("/");
-
- operation.numberA = 7;
- operation.numberB = 8;
-
- System.out.println(operation.result());
+ IllegalAccessException {
+ Operation operation = OperationFactory.createOperation("/");
+
+ operation.numberA = 7;
+ operation.numberB = 8;
+
+ System.out.println(operation.result());
}
}
diff --git a/src/designpattern/factory/abstraction/OperationFactory.java b/src/designpattern/factory/abstraction/OperationFactory.java
index b13483a..19f22f2 100644
--- a/src/designpattern/factory/abstraction/OperationFactory.java
+++ b/src/designpattern/factory/abstraction/OperationFactory.java
@@ -3,7 +3,7 @@
import java.util.HashMap;
import java.util.Map;
-import designpattern.factory.simple.Operation;
+import designpattern.factory.Operation;
import designpattern.factory.simple.OperationAdd;
import designpattern.factory.simple.OperationDiv;
import designpattern.factory.simple.OperationMul;
@@ -11,34 +11,28 @@
/**
* 利用反射改造简单工厂模式,去掉分支判断的逻辑
- *
- * @author liu yuning
*
+ * @author liu yuning
*/
public class OperationFactory {
- private static Map> allOperationMaps = new HashMap>();
-
+ private static final Map> allOperationMaps = new HashMap<>();
+
public static void fillMap() {
- allOperationMaps.put("+", OperationAdd.class);
- allOperationMaps.put("-", OperationSub.class);
- allOperationMaps.put("*", OperationMul.class);
- allOperationMaps.put("/", OperationDiv.class);
+ allOperationMaps.put("+", OperationAdd.class);
+ allOperationMaps.put("-", OperationSub.class);
+ allOperationMaps.put("*", OperationMul.class);
+ allOperationMaps.put("/", OperationDiv.class);
}
-
+
public static Operation createOperation(String operator)
- throws InstantiationException, IllegalAccessException {
- Operation operation;
-
- fillMap();
- Class> operationClass = allOperationMaps.get(operator);
-
- if (operationClass == null) {
- throw new RuntimeException("unsupported operation");
- }
-
- operation = (Operation) operationClass.newInstance();
-
- return operation;
+ throws InstantiationException, IllegalAccessException {
+ fillMap();
+ Class extends Operation> operationClass = allOperationMaps.get(operator);
+
+ if (operationClass == null) {
+ throw new RuntimeException("unsupported operation");
+ }
+ return operationClass.newInstance();
}
-
+
}
diff --git a/src/designpattern/factory/method/FactoryClient.java b/src/designpattern/factory/method/FactoryClient.java
deleted file mode 100644
index 6e833d7..0000000
--- a/src/designpattern/factory/method/FactoryClient.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package designpattern.factory.method;
-
-import designpattern.factory.simple.Operation;
-
-/**
- * 工厂方法客户端
- *
- * @author liu yuning
- *
- */
-public class FactoryClient {
- public static void main(String[] args) {
- IFactory operFactory = new DivFactory();
- Operation operation = operFactory.createOperation();
-
- operation.numberA = 3.4;
- operation.numberB = 4.5;
-
- System.out.println(operation.result());
-
- }
-}
\ No newline at end of file
diff --git a/src/designpattern/factory/method/IFactory.java b/src/designpattern/factory/method/IFactory.java
index d70ae69..37e9331 100644
--- a/src/designpattern/factory/method/IFactory.java
+++ b/src/designpattern/factory/method/IFactory.java
@@ -1,6 +1,6 @@
package designpattern.factory.method;
-import designpattern.factory.simple.Operation;
+import designpattern.factory.Operation;
import designpattern.factory.simple.OperationAdd;
import designpattern.factory.simple.OperationDiv;
import designpattern.factory.simple.OperationMul;
@@ -8,46 +8,45 @@
/**
* 工厂接口
- *
- * @author liu yuning
*
+ * @author liu yuning
*/
public interface IFactory {
public Operation createOperation();
}
class AddFactory implements IFactory {
-
+
@Override
public Operation createOperation() {
- return new OperationAdd();
+ return new OperationAdd();
}
-
+
}
class SubFactory implements IFactory {
-
+
@Override
public Operation createOperation() {
- return new OperationSub();
+ return new OperationSub();
}
-
+
}
class MulFactory implements IFactory {
-
+
@Override
public Operation createOperation() {
- return new OperationMul();
+ return new OperationMul();
}
-
+
}
class DivFactory implements IFactory {
-
+
@Override
public Operation createOperation() {
- return new OperationDiv();
+ return new OperationDiv();
}
-
+
}
\ No newline at end of file
diff --git a/src/designpattern/factory/method/MethodFactoryTest.java b/src/designpattern/factory/method/MethodFactoryTest.java
new file mode 100644
index 0000000..2367376
--- /dev/null
+++ b/src/designpattern/factory/method/MethodFactoryTest.java
@@ -0,0 +1,25 @@
+package designpattern.factory.method;
+
+import designpattern.factory.Operation;
+
+/**
+ * 工厂方法客户端,
+ * 这里对比简单工厂方法来讲,客户端上其实是没有区别的
+ * 我们之前将,简单工厂是因为违背了ocp原则,添加一个功能需要对工厂添加if else,这里就对之前的工厂进行了修改,但是工厂方法的话,
+ * 这里只需要新增工厂类,即可,对添加开放,这里不要管客户端是怎么调用的,工厂方法的开闭原则的重点应该放在工厂本身.
+ *
+ * @author liu yuning
+ *
+ */
+public class MethodFactoryTest {
+ public static void main(String[] args) {
+ IFactory operFactory = new DivFactory();
+ Operation operation = operFactory.createOperation();
+
+ operation.numberA = 3.4;
+ operation.numberB = 4.5;
+
+ System.out.println(operation.result());
+
+ }
+}
\ No newline at end of file
diff --git a/src/designpattern/factory/simple/Calculator.java b/src/designpattern/factory/simple/Calculator.java
deleted file mode 100644
index a2ebcf8..0000000
--- a/src/designpattern/factory/simple/Calculator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package designpattern.factory.simple;
-
-/**
- * 使用工厂方法生成实例完成运算操作
- *
- * @author liu yuning
- *
- */
-public class Calculator {
- public static void main(String[] args) {
- Operation operation;
- char operator;
-
- operator = '+';
- operation = OperationFactory.createOperation(operator);
- operation.numberA = 1.2;
- operation.numberB = 2.3;
-
- System.out.println(operation.result());
- }
-}
\ No newline at end of file
diff --git a/src/designpattern/factory/simple/OperationAdd.java b/src/designpattern/factory/simple/OperationAdd.java
index 985325a..7b9abd7 100644
--- a/src/designpattern/factory/simple/OperationAdd.java
+++ b/src/designpattern/factory/simple/OperationAdd.java
@@ -1,5 +1,7 @@
package designpattern.factory.simple;
+import designpattern.factory.Operation;
+
/**
* 加法类
*
diff --git a/src/designpattern/factory/simple/OperationDiv.java b/src/designpattern/factory/simple/OperationDiv.java
index 631dccb..b716f4e 100644
--- a/src/designpattern/factory/simple/OperationDiv.java
+++ b/src/designpattern/factory/simple/OperationDiv.java
@@ -1,5 +1,7 @@
package designpattern.factory.simple;
+import designpattern.factory.Operation;
+
/**
* 除法类
*
diff --git a/src/designpattern/factory/simple/OperationFactory.java b/src/designpattern/factory/simple/OperationFactory.java
deleted file mode 100644
index 76aa9dc..0000000
--- a/src/designpattern/factory/simple/OperationFactory.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package designpattern.factory.simple;
-
-/**
- * 操作类工厂类
- *
- * @author liu yuning
- *
- */
-public class OperationFactory {
- public static Operation createOperation(char operator) {
- Operation operation = null;
-
- switch (operator) {
- case '+':
- operation = new OperationAdd();
- break;
- case '-':
- operation = new OperationSub();
- break;
- case '*':
- operation = new OperationMul();
- break;
- case '/':
- operation = new OperationDiv();
- break;
- default:
- throw new RuntimeException("unsupported operation");
- }
-
- return operation;
- }
-}
\ No newline at end of file
diff --git a/src/designpattern/factory/simple/OperationMul.java b/src/designpattern/factory/simple/OperationMul.java
index d4aa7cd..4865959 100644
--- a/src/designpattern/factory/simple/OperationMul.java
+++ b/src/designpattern/factory/simple/OperationMul.java
@@ -1,5 +1,7 @@
package designpattern.factory.simple;
+import designpattern.factory.Operation;
+
/**
* 乘法类
*
diff --git a/src/designpattern/factory/simple/OperationSub.java b/src/designpattern/factory/simple/OperationSub.java
index ea31799..2b0fe5b 100644
--- a/src/designpattern/factory/simple/OperationSub.java
+++ b/src/designpattern/factory/simple/OperationSub.java
@@ -1,5 +1,7 @@
package designpattern.factory.simple;
+import designpattern.factory.Operation;
+
/**
* 减法类
*
diff --git a/src/designpattern/factory/simple/SimpleFactory.java b/src/designpattern/factory/simple/SimpleFactory.java
new file mode 100644
index 0000000..e10bb42
--- /dev/null
+++ b/src/designpattern/factory/simple/SimpleFactory.java
@@ -0,0 +1,37 @@
+package designpattern.factory.simple;
+
+import designpattern.factory.Operation;
+
+/**
+ * 简单工厂,
+ * 优点是比较好理解,简单易操作。
+ * 缺点是类的创建依赖工厂类,如果想要拓展程序,必须对工厂类进行修改,
+ * 这违反了设计模式的开闭原则(OCP),即对扩展开放,对修改关闭。
+ * 比如现在想添加一个开方的运算,需要修改工厂的判断逻辑,添加一个case条件.
+ *
+ * @author liu yuning
+ */
+public class SimpleFactory {
+ public static Operation createOperation(char operator) {
+ Operation operation = null;
+
+ switch (operator) {
+ case '+':
+ operation = new OperationAdd();
+ break;
+ case '-':
+ operation = new OperationSub();
+ break;
+ case '*':
+ operation = new OperationMul();
+ break;
+ case '/':
+ operation = new OperationDiv();
+ break;
+ default:
+ throw new RuntimeException("unsupported operation");
+ }
+
+ return operation;
+ }
+}
\ No newline at end of file
diff --git a/src/designpattern/factory/simple/SimpleFactoryTest.java b/src/designpattern/factory/simple/SimpleFactoryTest.java
new file mode 100644
index 0000000..576d51f
--- /dev/null
+++ b/src/designpattern/factory/simple/SimpleFactoryTest.java
@@ -0,0 +1,22 @@
+package designpattern.factory.simple;
+
+import designpattern.factory.Operation;
+
+/**
+ * 使用工厂方法生成实例完成运算操作
+ *
+ * @author liu yuning
+ */
+public class SimpleFactoryTest {
+ public static void main(String[] args) {
+ Operation operation;
+ char operator;
+
+ operator = '+';
+ operation = SimpleFactory.createOperation(operator);
+ operation.numberA = 1.2;
+ operation.numberB = 2.3;
+
+ System.out.println(operation.result());
+ }
+}
\ No newline at end of file
diff --git a/src/designpattern/prototype/PrototypeClient.java b/src/designpattern/prototype/PrototypeClient.java
index ce628c0..6d89bfd 100644
--- a/src/designpattern/prototype/PrototypeClient.java
+++ b/src/designpattern/prototype/PrototypeClient.java
@@ -4,59 +4,58 @@
/**
* 原型模式客户端 演示深度拷贝和浅度拷贝
- *
- * @Todo 考虑优化此处的重复代码
- * @author liu yuning
*
+ * @author liu yuning
+ * @Todo 考虑优化此处的重复代码
*/
public class PrototypeClient {
public static void shallowCopy() throws CloneNotSupportedException {
- Resume aResume = new Resume();
- aResume.setName("大鸟 ").setGender("男 ").setAge(25);
- aResume.setWorkExperience("1999-2002, ", "XX公司");
-
- Resume bResume = (Resume) aResume.clone();
- bResume.setWorkExperience("1999-2002, ", "YY公司");
-
- Resume cResume = (Resume) aResume.clone();
- cResume.setWorkExperience("1999-2002, ", "ZZ公司");
-
- System.out.println(">>>>>>浅度拷贝:");
- aResume.display();
- bResume.display();
- cResume.display();
+ Resume aResume = new Resume();
+ aResume.setName("大鸟 ").setGender("男 ").setAge(25);
+ aResume.setWorkExperience("1999-2002, ", "XX公司");
+
+ Resume bResume = (Resume) aResume.clone();
+ bResume.setWorkExperience("1999-2002, ", "YY公司");
+
+ Resume cResume = (Resume) aResume.clone();
+ cResume.setWorkExperience("1999-2002, ", "ZZ公司");
+
+ System.out.println(">>>>>>浅度拷贝:");
+ aResume.display();
+ bResume.display();
+ cResume.display();
}
-
+
public static void deepCopy() throws CloneNotSupportedException,
- ClassNotFoundException, IOException {
- Resume aResume = new Resume();
- aResume.setName("大鸟 ").setGender("男 ").setAge(25);
- aResume.setWorkExperience("1999-2002, ", "XX公司");
-
- Resume bResume = (Resume) aResume.deepClone();
- bResume.setWorkExperience("1999-2002, ", "YY公司");
-
- Resume cResume = (Resume) aResume.deepClone();
- cResume.setWorkExperience("1999-2002, ", "ZZ公司");
-
- System.out.println(">>>>>>深度拷贝:");
- aResume.display();
- bResume.display();
- cResume.display();
-
+ ClassNotFoundException, IOException {
+ Resume aResume = new Resume();
+ aResume.setName("大鸟 ").setGender("男 ").setAge(25);
+ aResume.setWorkExperience("1999-2002, ", "XX公司");
+
+ Resume bResume = (Resume) aResume.deepClone();
+ bResume.setWorkExperience("1999-2002, ", "YY公司");
+
+ Resume cResume = (Resume) aResume.deepClone();
+ cResume.setWorkExperience("1999-2002, ", "ZZ公司");
+
+ System.out.println(">>>>>>深度拷贝:");
+ aResume.display();
+ bResume.display();
+ cResume.display();
+
}
-
+
public static void main(String[] args) throws CloneNotSupportedException,
- ClassNotFoundException, IOException {
-
- // 浅度拷贝
- shallowCopy();
-
- System.out.println("==================================");
-
- // 深度拷贝
- deepCopy();
-
+ ClassNotFoundException, IOException {
+
+ // 浅度拷贝
+ shallowCopy();
+
+ System.out.println("==================================");
+
+ // 深度拷贝
+ deepCopy();
+
}
-
+
}
diff --git a/src/designpattern/prototype/Resume.java b/src/designpattern/prototype/Resume.java
index 19a12e9..b3f55ef 100644
--- a/src/designpattern/prototype/Resume.java
+++ b/src/designpattern/prototype/Resume.java
@@ -9,87 +9,86 @@
/**
* 简历类
- *
- * @author liu yuning
*
+ * @author liu yuning
*/
public class Resume implements Cloneable, Serializable {
private static final long serialVersionUID = -4410449301166191440L;
-
+
private String name;
private String gender;
private int age;
-
+
// 引用“工作经历”对象,为演示深度拷贝和浅度拷贝而用
private WorkExperience workExperience;
-
+
public Resume() {
- // 在“简历”类实例化时,同时实例化“工作经历”类
- workExperience = new WorkExperience();
+ // 在“简历”类实例化时,同时实例化“工作经历”类
+ workExperience = new WorkExperience();
}
-
+
public void display() {
- System.out.println(this.getName() + " " + this.getGender() + " "
- + this.getAge() + "\n工作经历: "
- + this.getWorkExperience().getWorkDate() + " "
- + this.getWorkExperience().getWorkCompany());
+ System.out.println(this.getName() + " " + this.getGender() + " "
+ + this.getAge() + "\n工作经历: "
+ + this.getWorkExperience().getWorkDate() + " "
+ + this.getWorkExperience().getWorkCompany());
}
-
+
@Override
protected Object clone() throws CloneNotSupportedException {
- return super.clone();
+ return super.clone();
}
-
+
// 通过对象序列化,实现深度拷贝
public Object deepClone() throws IOException, ClassNotFoundException {
- // 将对象写入流内
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(bos);
- oos.writeObject(this);
-
- // 从流内读出对象
- ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
- bos.toByteArray()));
- return ois.readObject();
-
+ // 将对象写入流内
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(bos);
+ oos.writeObject(this);
+
+ // 从流内读出对象
+ ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(
+ bos.toByteArray()));
+ return ois.readObject();
+
}
-
+
public String getName() {
- return name;
+ return name;
}
-
+
public Resume setName(String name) {
- this.name = name;
-
- return this;
+ this.name = name;
+
+ return this;
}
-
+
public String getGender() {
- return gender;
+ return gender;
}
-
+
public Resume setGender(String gender) {
- this.gender = gender;
-
- return this;
+ this.gender = gender;
+
+ return this;
}
-
+
public int getAge() {
- return age;
+ return age;
}
-
+
public Resume setAge(int age) {
- this.age = age;
-
- return this;
+ this.age = age;
+
+ return this;
}
-
+
public WorkExperience getWorkExperience() {
- return workExperience;
+ return workExperience;
}
-
+
public void setWorkExperience(String workDate, String workCompany) {
- workExperience.setWorkDate(workDate);
- workExperience.setWorkCompany(workCompany);
+ workExperience.setWorkDate(workDate);
+ workExperience.setWorkCompany(workCompany);
}
}
diff --git a/src/designpattern/prototype/WorkExperience.java b/src/designpattern/prototype/WorkExperience.java
index d40f7ca..7228b9f 100644
--- a/src/designpattern/prototype/WorkExperience.java
+++ b/src/designpattern/prototype/WorkExperience.java
@@ -4,34 +4,33 @@
/**
* 工作经历类,为演示深度拷贝和浅度拷贝而用
- *
- * @author liu yuning
*
+ * @author liu yuning
*/
public class WorkExperience implements Serializable {
private static final long serialVersionUID = 1L;
-
+
private String workDate;
private String workCompany;
-
+
public String getWorkDate() {
- return workDate;
+ return workDate;
}
-
+
public WorkExperience setWorkDate(String workDate) {
- this.workDate = workDate;
-
- return this;
+ this.workDate = workDate;
+
+ return this;
}
-
+
public String getWorkCompany() {
- return workCompany;
+ return workCompany;
}
-
+
public WorkExperience setWorkCompany(String workCompany) {
- this.workCompany = workCompany;
-
- return this;
+ this.workCompany = workCompany;
+
+ return this;
}
-
+
}
diff --git a/wechatpay.JPG b/wechatpay.JPG
deleted file mode 100644
index 0478ac7..0000000
Binary files a/wechatpay.JPG and /dev/null differ