From efc1088cc862ebe508a9f33efd99fd607a225399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Thu, 5 Dec 2019 15:34:06 +0800 Subject: [PATCH] =?UTF-8?q?Java=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behavioral/interpreter/AddExpression.java | 14 ++++++ .../behavioral/interpreter/Calculator.java | 44 +++++++++++++++++++ .../behavioral/interpreter/Expression.java | 8 ++++ .../behavioral/interpreter/SubExpression.java | 13 ++++++ .../interpreter/SymbolExpression.java | 12 +++++ .../behavioral/interpreter/VarExpression.java | 17 +++++++ .../behavioral/interpreter/ZTest.java | 39 ++++++++++++++++ .../heibaiying/behavioral/iterator/Book.java | 13 ++++++ .../behavioral/iterator/BookIterator.java | 23 ++++++++++ .../behavioral/iterator/Bookshelf.java | 13 ++++++ .../behavioral/iterator/BookshelfImpl.java | 27 ++++++++++++ .../behavioral/iterator/Iterator.java | 6 +++ .../heibaiying/behavioral/iterator/ZTest.java | 14 ++++++ .../behavioral/observer/Business.java | 26 +++++++++++ .../behavioral/observer/Observable.java | 10 +++++ .../behavioral/observer/Observer.java | 5 +++ .../heibaiying/behavioral/observer/User.java | 18 ++++++++ .../heibaiying/behavioral/observer/ZTest.java | 13 ++++++ .../behavioral/strategy/BonusStrategy.java | 8 ++++ .../behavioral/strategy/Company.java | 15 +++++++ .../behavioral/strategy/Strategy.java | 5 +++ .../behavioral/strategy/TravelStrategy.java | 8 ++++ .../strategy/WorkOvertimeStrategy.java | 8 ++++ .../heibaiying/behavioral/strategy/ZTest.java | 16 +++++++ .../behavioral/template/OlderPhone.java | 14 ++++++ .../heibaiying/behavioral/template/Phone.java | 30 +++++++++++++ .../behavioral/template/SmartPhone.java | 14 ++++++ .../heibaiying/behavioral/template/ZTest.java | 10 +++++ 28 files changed, 443 insertions(+) create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/AddExpression.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Calculator.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Expression.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SubExpression.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SymbolExpression.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/VarExpression.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/ZTest.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Book.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookIterator.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Bookshelf.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookshelfImpl.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Iterator.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/ZTest.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Business.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observable.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observer.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/User.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/ZTest.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/BonusStrategy.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Company.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Strategy.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/TravelStrategy.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/WorkOvertimeStrategy.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/ZTest.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/OlderPhone.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/Phone.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/SmartPhone.java create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/ZTest.java diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/AddExpression.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/AddExpression.java new file mode 100644 index 0000000..1589111 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/AddExpression.java @@ -0,0 +1,14 @@ +package com.heibaiying.behavioral.interpreter; + +import java.util.HashMap; + +public class AddExpression extends SymbolExpression { + public AddExpression(Expression left, Expression right) { + super(left, right); + } + + //把左右两个表达式运算的结果加起来 + public int interpreter(HashMap var) { + return super.left.interpreter(var) + super.right.interpreter(var); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Calculator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Calculator.java new file mode 100644 index 0000000..6c5b924 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Calculator.java @@ -0,0 +1,44 @@ +package com.heibaiying.behavioral.interpreter; + +import java.util.HashMap; +import java.util.Stack; + +public class Calculator { + //定义表达式 + private Expression expression; + + //构造函数传参,并解析 + public Calculator(String expStr) { + //定义一个栈,安排运算的先后顺序 + Stack stack = new Stack<>(); + //表达式拆分为字符数组 + char[] charArray = expStr.toCharArray(); + //运算 + Expression left; + Expression right; + for (int i = 0; i < charArray.length; i++) { + switch (charArray[i]) { + case '+': //加法 + //加法结果放到栈中 + left = stack.pop(); + right = new VarExpression(String.valueOf(charArray[++i])); + stack.push(new AddExpression(left, right)); + break; + case '-': + left = stack.pop(); + right = new VarExpression(String.valueOf(charArray[++i])); + stack.push(new SubExpression(left, right)); + break; + default: //公式中的变量 + stack.push(new VarExpression(String.valueOf(charArray[i]))); + } + } + //把运算结果抛出来 + this.expression = stack.pop(); + } + + //开始运算 + public int run(HashMap var) { + return this.expression.interpreter(var); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Expression.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Expression.java new file mode 100644 index 0000000..5712eb4 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/Expression.java @@ -0,0 +1,8 @@ +package com.heibaiying.behavioral.interpreter; + +import java.util.HashMap; + +public abstract class Expression { + //解析公式和数值,其中var中的key值是公式中的参数,value值是具体的数字 + public abstract int interpreter(HashMap var); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SubExpression.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SubExpression.java new file mode 100644 index 0000000..0e178b1 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SubExpression.java @@ -0,0 +1,13 @@ +package com.heibaiying.behavioral.interpreter; + +import java.util.HashMap; + +public class SubExpression extends SymbolExpression { + public SubExpression(Expression left,Expression right){ + super(left,right); + } + //左右两个表达式相减 + public int interpreter(HashMap var) { + return super.left.interpreter(var) - super.right.interpreter(var); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SymbolExpression.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SymbolExpression.java new file mode 100644 index 0000000..8820d20 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/SymbolExpression.java @@ -0,0 +1,12 @@ +package com.heibaiying.behavioral.interpreter; + +public abstract class SymbolExpression extends Expression { + protected Expression left; + protected Expression right; + + //所有的解析公式都应只关心自己左右两个表达式的结果 + public SymbolExpression(Expression left, Expression right) { + this.left = left; + this.right = right; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/VarExpression.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/VarExpression.java new file mode 100644 index 0000000..128588b --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/VarExpression.java @@ -0,0 +1,17 @@ +package com.heibaiying.behavioral.interpreter; + +import java.util.HashMap; + +public class VarExpression extends Expression { + + private String key; + + public VarExpression(String key) { + this.key = key; + } + + //从map中取之 + public int interpreter(HashMap var) { + return var.get(this.key); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/ZTest.java new file mode 100644 index 0000000..9c1356c --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/interpreter/ZTest.java @@ -0,0 +1,39 @@ +package com.heibaiying.behavioral.interpreter; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.HashMap; + +public class ZTest { + //运行四则运算 + public static void main(String[] args) throws IOException { + String expStr = getExpStr(); + //赋值 + HashMap var = getValue(expStr); + Calculator cal = new Calculator(expStr); + System.out.println("运算结果为:" + expStr + "=" + cal.run(var)); + } + + //获得表达式 + public static String getExpStr() throws IOException { + System.out.print("请输入表达式:"); + return (new BufferedReader(new InputStreamReader(System.in))).readLine(); + } + + //获得值映射 + public static HashMap getValue(String exprStr) throws IOException { + HashMap map = new HashMap(); + //解析有几个参数要传递 + for (char ch : exprStr.toCharArray()) { + if (ch != '+' && ch != '-') { + //解决重复参数的问题 + if (!map.containsKey(String.valueOf(ch))) { + String in = (new BufferedReader(new InputStreamReader(System.in))).readLine(); + map.put(String.valueOf(ch), Integer.valueOf(in)); + } + } + } + return map; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Book.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Book.java new file mode 100644 index 0000000..f341c1b --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Book.java @@ -0,0 +1,13 @@ +package com.heibaiying.behavioral.iterator; + +import lombok.Data; + +@Data +public class Book { + private String name; + + public Book(String name) { + this.name = name; + } + +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookIterator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookIterator.java new file mode 100644 index 0000000..001487d --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookIterator.java @@ -0,0 +1,23 @@ +package com.heibaiying.behavioral.iterator; + +import java.util.List; + +public class BookIterator implements Iterator { + + private List bookList; + private int position = 0; + + public BookIterator(List bookList) { + this.bookList = bookList; + } + + @Override + public Book next() { + return bookList.get(position++); + } + + @Override + public boolean hasNext() { + return position < bookList.size(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Bookshelf.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Bookshelf.java new file mode 100644 index 0000000..90aea52 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Bookshelf.java @@ -0,0 +1,13 @@ +package com.heibaiying.behavioral.iterator; + +/** + * 书柜 + */ +public interface Bookshelf { + + void addBook(Book book); + + void removeBook(Book book); + + BookIterator iterator(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookshelfImpl.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookshelfImpl.java new file mode 100644 index 0000000..668cadb --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/BookshelfImpl.java @@ -0,0 +1,27 @@ +package com.heibaiying.behavioral.iterator; + +import java.util.ArrayList; +import java.util.List; + +/** + * 书柜 + */ +public class BookshelfImpl implements Bookshelf { + + private List bookList = new ArrayList<>(); + + @Override + public void addBook(Book book) { + bookList.add(book); + } + + @Override + public void removeBook(Book book) { + bookList.remove(book); + } + + @Override + public BookIterator iterator() { + return new BookIterator(bookList); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Iterator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Iterator.java new file mode 100644 index 0000000..c49ae31 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/Iterator.java @@ -0,0 +1,6 @@ +package com.heibaiying.behavioral.iterator; + +public interface Iterator { + E next(); + boolean hasNext(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/ZTest.java new file mode 100644 index 0000000..1671436 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/iterator/ZTest.java @@ -0,0 +1,14 @@ +package com.heibaiying.behavioral.iterator; + +public class ZTest { + public static void main(String[] args) { + BookshelfImpl bookshelf = new BookshelfImpl(); + bookshelf.addBook(new Book("Java书籍")); + bookshelf.addBook(new Book("Python书籍")); + bookshelf.addBook(new Book("Go书籍")); + BookIterator iterator = bookshelf.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Business.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Business.java new file mode 100644 index 0000000..edb17d2 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Business.java @@ -0,0 +1,26 @@ +package com.heibaiying.behavioral.observer; + +import java.util.ArrayList; +import java.util.List; + +public class Business implements Observable { + + private List observerList = new ArrayList<>(); + + @Override + public void addObserver(Observer observer) { + observerList.add(observer); + } + + @Override + public void removeObserver(Observer observer) { + observerList.remove(observer); + } + + @Override + public void notifyObservers(String message) { + for (Observer observer : observerList) { + observer.receive(message); + } + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observable.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observable.java new file mode 100644 index 0000000..9e46abd --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observable.java @@ -0,0 +1,10 @@ +package com.heibaiying.behavioral.observer; + +public interface Observable { + + void addObserver(Observer observer); + + void removeObserver(Observer observer); + + void notifyObservers(String message); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observer.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observer.java new file mode 100644 index 0000000..c0ff410 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/Observer.java @@ -0,0 +1,5 @@ +package com.heibaiying.behavioral.observer; + +public interface Observer { + void receive(String message); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/User.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/User.java new file mode 100644 index 0000000..de64eb3 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/User.java @@ -0,0 +1,18 @@ +package com.heibaiying.behavioral.observer; + +import lombok.Data; + +@Data +public class User implements Observer { + + private String name; + + public User(String name) { + this.name = name; + } + + @Override + public void receive(String message) { + System.out.println(getName() + "收到消息:" + message); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/ZTest.java new file mode 100644 index 0000000..4716018 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/observer/ZTest.java @@ -0,0 +1,13 @@ +package com.heibaiying.behavioral.observer; + +public class ZTest { + + public static void main(String[] args) { + Business business = new Business(); + business.addObserver(new User("用户1")); + business.addObserver(new User("用户2")); + business.addObserver(new User("用户3")); + business.notifyObservers("商品促销通知"); + } + +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/BonusStrategy.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/BonusStrategy.java new file mode 100644 index 0000000..1d7a57c --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/BonusStrategy.java @@ -0,0 +1,8 @@ +package com.heibaiying.behavioral.strategy; + +public class BonusStrategy implements Strategy { + @Override + public void execute() { + System.out.println("奖金激励"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Company.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Company.java new file mode 100644 index 0000000..db9ac3c --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Company.java @@ -0,0 +1,15 @@ +package com.heibaiying.behavioral.strategy; + +public class Company { + + private Strategy strategy; + + public Company setStrategy(Strategy strategy) { + this.strategy = strategy; + return this; + } + + public void execute() { + strategy.execute(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Strategy.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Strategy.java new file mode 100644 index 0000000..24691b0 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/Strategy.java @@ -0,0 +1,5 @@ +package com.heibaiying.behavioral.strategy; + +public interface Strategy { + void execute(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/TravelStrategy.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/TravelStrategy.java new file mode 100644 index 0000000..c16ca94 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/TravelStrategy.java @@ -0,0 +1,8 @@ +package com.heibaiying.behavioral.strategy; + +public class TravelStrategy implements Strategy { + @Override + public void execute() { + System.out.println("集体旅游"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/WorkOvertimeStrategy.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/WorkOvertimeStrategy.java new file mode 100644 index 0000000..a460928 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/WorkOvertimeStrategy.java @@ -0,0 +1,8 @@ +package com.heibaiying.behavioral.strategy; + +public class WorkOvertimeStrategy implements Strategy { + @Override + public void execute() { + System.out.println("奖励加班"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/ZTest.java new file mode 100644 index 0000000..f0bde72 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/strategy/ZTest.java @@ -0,0 +1,16 @@ +package com.heibaiying.behavioral.strategy; + +public class ZTest { + public static void main(String[] args) { + // 营业额 + int turnover = Integer.parseInt(args[0]); + Company company = new Company(); + if (turnover > 1000) { + company.setStrategy(new BonusStrategy()).execute(); + } else if (turnover > 100) { + company.setStrategy(new TravelStrategy()).execute(); + } else { + company.setStrategy(new WorkOvertimeStrategy()).execute(); + } + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/OlderPhone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/OlderPhone.java new file mode 100644 index 0000000..f990a46 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/OlderPhone.java @@ -0,0 +1,14 @@ +package com.heibaiying.behavioral.template; + +public class OlderPhone extends Phone { + + @Override + boolean needAddNFC() { + return false; + } + + @Override + void packaged() { + System.out.println("附赠一个手机壳"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/Phone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/Phone.java new file mode 100644 index 0000000..32d6af8 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/Phone.java @@ -0,0 +1,30 @@ +package com.heibaiying.behavioral.template; + +public abstract class Phone { + + public void assembling() { + adCamera(); + addBattery(); + if (needAddNFC()) { + addNFC(); + } + packaged(); + } + + private void adCamera() { + System.out.println("组装摄像头"); + } + + private void addBattery() { + System.out.println("安装电池"); + } + + private void addNFC() { + System.out.println("增加NFC功能"); + } + + // 钩子方法 + abstract boolean needAddNFC(); + + abstract void packaged(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/SmartPhone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/SmartPhone.java new file mode 100644 index 0000000..1521976 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/SmartPhone.java @@ -0,0 +1,14 @@ +package com.heibaiying.behavioral.template; + +public class SmartPhone extends Phone { + + @Override + boolean needAddNFC() { + return true; + } + + @Override + void packaged() { + System.out.println("附赠耳机一副"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/ZTest.java new file mode 100644 index 0000000..abc5d1f --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/template/ZTest.java @@ -0,0 +1,10 @@ +package com.heibaiying.behavioral.template; + +public class ZTest { + public static void main(String[] args) { + OlderPhone olderPhone = new OlderPhone(); + olderPhone.assembling(); + SmartPhone smartPhone = new SmartPhone(); + smartPhone.assembling(); + } +}