diff --git "a/docs/\346\235\202\350\260\210/\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\350\215\274\346\257\222\344\275\223\347\216\260\345\234\250\345\223\252.md" "b/docs/\346\235\202\350\260\210/\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\350\215\274\346\257\222\344\275\223\347\216\260\345\234\250\345\223\252.md" index ac935de..e763f68 100644 --- "a/docs/\346\235\202\350\260\210/\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\350\215\274\346\257\222\344\275\223\347\216\260\345\234\250\345\223\252.md" +++ "b/docs/\346\235\202\350\260\210/\350\256\276\350\256\241\346\250\241\345\274\217\347\232\204\350\215\274\346\257\222\344\275\223\347\216\260\345\234\250\345\223\252.md" @@ -2,11 +2,74 @@ 假如我有一个加减乘除的方法,我可以这样写: -image-20241202183805321 +```java +public int calculate(int numa, int numb, char operation) { + switch (operation) { + case '+': + return numa + numb; + case '-': + return numa - numb; + case '*': + return numa * numb; + case '/': + return numa / numb; + default: + return 0; + } +} +``` 但如果我希望后续支持更多的计算模式,用了策略模式后,就变成了这样,代码变多了,逻辑也复杂了很多: -image-20241202183754131 +```java +public interface Operation { + int calculate(int numa, int numb); +} +``` + +```java +public class Addition implements Operation { + @Override + public int calculate(int numa, int numb) { + return numa + numb; + } +} +public class Subtraction implements Operation { + @Override + public int calculate(int numa, int numb) { + return numa - numb; + } +} +public class Multiplication implements Operation { + @Override + public int calculate(int numa, int numb) { + return numa * numb; + } +} +public class Division implements Operation { + @Override + public int calculate(int numa, int numb) { + return numa / numb; + } +} +``` + +```java +public class OperationFactory { + private static final Map operations = new HashMap<>(); + + static { + operations.put("+", new Addition()); + operations.put("-", new Subtraction()); + operations.put("*", new Multiplication()); + operations.put("/", new Division()); + } + + public static Operation getOperation(String operation) { + return operations.get(operation); + } +} +``` ## 设计模式的荼毒体现在哪?