From 3c2f34231d780efb4dcdfd54915431d0e2687c33 Mon Sep 17 00:00:00 2001 From: yangzhm Date: Mon, 17 Jul 2017 11:08:56 +0800 Subject: [PATCH 01/23] add project of builder pattern --- students/495232796/OOD/builderpattern/pom.xml | 42 ++++++++++ .../com/coderising/dp/builder/TagBuilder.java | 41 ++++++++++ .../coderising/dp/builder/TagBuilderTest.java | 41 ++++++++++ .../com/coderising/dp/builder/TagNode.java | 82 +++++++++++++++++++ .../java/com/coderising/dp/main/TestAll.java | 17 ++++ 5 files changed, 223 insertions(+) create mode 100644 students/495232796/OOD/builderpattern/pom.xml create mode 100644 students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java create mode 100644 students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java create mode 100644 students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java create mode 100644 students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java diff --git a/students/495232796/OOD/builderpattern/pom.xml b/students/495232796/OOD/builderpattern/pom.xml new file mode 100644 index 0000000000..84bf4627e3 --- /dev/null +++ b/students/495232796/OOD/builderpattern/pom.xml @@ -0,0 +1,42 @@ + + 4.0.0 + com.coderising + ood-assignment + 0.0.1-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.7 + 1.7 + + + + + jar + + ood-assignment + http://maven.apache.org + + + UTF-8 + + + + + + junit + junit + 4.12 + + + + + + aliyunmaven + http://maven.aliyun.com/nexus/content/groups/public/ + + + \ No newline at end of file diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java new file mode 100644 index 0000000000..cf143e1ee6 --- /dev/null +++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilder.java @@ -0,0 +1,41 @@ +package com.coderising.dp.builder; + +public class TagBuilder { + private TagNode rootNode = null; + private TagNode curNode = null; + private TagNode parentNode = null; + + public TagBuilder(String rootTagName){ + rootNode = new TagNode(rootTagName); + curNode = rootNode; + } + + public TagBuilder addChild(String childTagName){ + TagNode tn = new TagNode(childTagName); + curNode.add(tn); + parentNode = curNode; + curNode = tn; + + return this; + } + public TagBuilder addSibling(String siblingTagName){ + TagNode tn = new TagNode(siblingTagName); + parentNode.add(tn); + curNode = tn; + + return this; + } + public TagBuilder setAttribute(String name, String value){ + curNode.setAttribute(name, value); + + return this; + } + public TagBuilder setText(String value){ + curNode.setValue(value); + + return this; + } + public String toXML(){ + return rootNode.toXML(); + } +} diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java new file mode 100644 index 0000000000..e98cfae947 --- /dev/null +++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagBuilderTest.java @@ -0,0 +1,41 @@ +package com.coderising.dp.builder; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TagBuilderTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + + TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + System.out.println(expected.equals(xml)); + assertEquals(expected, xml); + } + +} diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java new file mode 100644 index 0000000000..6a31e04192 --- /dev/null +++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/builder/TagNode.java @@ -0,0 +1,82 @@ +package com.coderising.dp.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + } else { + attributes.add(new Attribute(name,value)); + } + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + private static class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } +} diff --git a/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java new file mode 100644 index 0000000000..d5ab3b0f05 --- /dev/null +++ b/students/495232796/OOD/builderpattern/src/main/java/com/coderising/dp/main/TestAll.java @@ -0,0 +1,17 @@ +package com.coderising.dp.main; + +import com.coderising.dp.builder.TagBuilderTest; + +public class TestAll { + + public void testTag() { + TagBuilderTest tt = new TagBuilderTest(); + tt.testToXML(); + } + + public static void main(String[] args) { + TestAll ta = new TestAll(); + ta.testTag(); + } + +} From d0385218c6252eafc8bc4c93d08c12ecb05dd5b5 Mon Sep 17 00:00:00 2001 From: Liu Zengzeng Date: Mon, 17 Jul 2017 11:51:30 +0800 Subject: [PATCH 02/23] atm homework --- .../coderising/ood/atmSimulation/atm/Atm.java | 166 ++++++++++++++++++ .../ood/atmSimulation/atm/Main.java | 97 ++++++++++ .../atmSimulation/atm/console/Display.java | 13 ++ .../atmSimulation/atm/console/KeyBoard.java | 26 +++ .../atm/console/SuperKeypad.java | 45 +++++ .../ood/atmSimulation/atm/print/Printer.java | 17 ++ .../atmSimulation/atm/proxy/BankProxy.java | 29 +++ .../ood/atmSimulation/atm/proxy/Network.java | 20 +++ .../atmSimulation/atm/reader/CardReader.java | 18 ++ .../atmSimulation/atm/slot/CashDepensier.java | 16 ++ .../atmSimulation/atm/slot/DepositSlot.java | 12 ++ .../ood/atmSimulation/atm/slot/MoneySlot.java | 28 +++ .../atm/transaction/DepositTx.java | 43 +++++ .../atm/transaction/QueryBalanceTx.java | 42 +++++ .../atm/transaction/TransferTx.java | 44 +++++ .../atm/transaction/Trasaction.java | 17 ++ .../atm/transaction/WithdrawTx.java | 42 +++++ .../ood/atmSimulation/bank/Bank.java | 97 ++++++++++ .../atmSimulation/bank/account/Account.java | 49 ++++++ .../atmSimulation/bank/proxy/ATMProxy.java | 34 ++++ .../bank/transaction/DepositTx.java | 38 ++++ .../bank/transaction/QueryBalanceTx.java | 38 ++++ .../bank/transaction/TransferTx.java | 42 +++++ .../bank/transaction/Trasaction.java | 16 ++ .../bank/transaction/WithdrawTx.java | 39 ++++ .../ood/atmSimulation/card/Card.java | 17 ++ .../serialization/JsonConvert.java | 19 ++ .../serialization/NetPackage.java | 76 ++++++++ 28 files changed, 1140 insertions(+) create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Atm.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Main.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/Display.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/KeyBoard.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/SuperKeypad.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/print/Printer.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/BankProxy.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/Network.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/reader/CardReader.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/CashDepensier.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/DepositSlot.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/MoneySlot.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/DepositTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/QueryBalanceTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/TransferTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/Trasaction.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/WithdrawTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/Bank.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/account/Account.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/proxy/ATMProxy.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/DepositTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/QueryBalanceTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/TransferTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/Trasaction.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/WithdrawTx.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/card/Card.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/JsonConvert.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/NetPackage.java diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Atm.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Atm.java new file mode 100644 index 0000000000..9728b39bfb --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Atm.java @@ -0,0 +1,166 @@ +package com.coderising.ood.atmSimulation.atm; + +import com.coderising.ood.atmSimulation.atm.console.SuperKeypad; +import com.coderising.ood.atmSimulation.atm.print.Printer; +import com.coderising.ood.atmSimulation.atm.proxy.BankProxy; +import com.coderising.ood.atmSimulation.atm.reader.CardReader; +import com.coderising.ood.atmSimulation.atm.slot.CashDepensier; +import com.coderising.ood.atmSimulation.atm.slot.DepositSlot; +import com.coderising.ood.atmSimulation.atm.transaction.*; +import com.coderising.ood.atmSimulation.card.Card; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Atm { + //存钱口 + private DepositSlot depositSlot; + //取钱口 + private CashDepensier cashDepensier; + //超级键盘 + private SuperKeypad superKeypad; + //读卡器 + private CardReader cardReader; + //bankProxy + private BankProxy bankProxy; + //打印器 + private Printer printer; + + public Atm(DepositSlot depositSlot, CashDepensier cashDepensier, + SuperKeypad superKeypad, CardReader cardReader, BankProxy bankProxy, Printer printer) { + this.depositSlot = depositSlot; + this.cashDepensier = cashDepensier; + this.superKeypad = superKeypad; + this.cardReader = cardReader; + this.bankProxy = bankProxy; + this.printer = printer; + } + + //账号|密码 + private String account; + private String password; + + private List list = new ArrayList<>(); + + public String getAccount() { + return account; + } + + public String getPassword() { + return password; + } + + public boolean hasEnoughMoney(int amount) { + return cashDepensier.hasEnoughMoney(amount); + } + + public boolean dipenseMoney(int amount) { + return cashDepensier.dispenseMoney(amount); + } + + public int retriveMoney() { + Random random = new Random(); + int money = random.nextInt(10000); + return depositSlot.retriveMoney(money); + } + + //插卡 + public void insertCard(Card card) { + account = cardReader.readCard(card); + } + + //输入密码 + public void writePassword() { + int count = 1; + while (count <= 3) { + count++; + password = superKeypad.inputPassword(); + if (bankProxy.verify(account, password)) { + return; + } + } + superKeypad.display("吞卡啦,到前台吧~"); + throw new RuntimeException("atm eat card"); + } + + //查询 + public void query() { + superKeypad.display("查询"); + QueryBalanceTx tx = new QueryBalanceTx(); + if (tx.preProcess(this)) { + String response = bankProxy.process(tx, this); + tx.setAmount(Integer.valueOf(response)); + superKeypad.display("查询操作余额为:" + response); + } + list.add(tx); + tx.postProcess(this); + } + + //转账 + public void transfer() { + superKeypad.display("转账"); + String toCard = superKeypad.inputCardNumber(); + int amount = superKeypad.inputAmount(); + TransferTx tx = new TransferTx(toCard, amount); + if (tx.preProcess(this)) { + String response = bankProxy.process(tx, this); + superKeypad.display("转账后,余额为:" + response); + } + list.add(tx); + tx.postProcess(this); + } + + //取款 + public void dependesier() { + superKeypad.display("取款"); + int amount = superKeypad.inputAmount(); + WithdrawTx tx = new WithdrawTx(amount); + if (tx.preProcess(this)) { + String response = bankProxy.process(tx, this); + superKeypad.display("取款后,余额为:" + response); + } + list.add(tx); + tx.postProcess(this); + } + + //存钱 + public void deposit() { + superKeypad.display("存款"); + DepositTx tx = new DepositTx(retriveMoney()); + if (tx.preProcess(this)) { + String response = bankProxy.process(tx, this); + superKeypad.display("存钱后,余额为:" + response); + } + list.add(tx); + tx.postProcess(this); + } + + //打印 + public void print() { + superKeypad.display("------打印操作-------"); + printer.print(list); + superKeypad.display("------打印完毕-------"); + } + + //退卡 + public void ejectCard(Card card) { + cardReader.ejectCard(card); + superKeypad.display("退卡成功"); + } + + //引导 + public void showGuide() { + superKeypad.display("请选择操作:"); + superKeypad.display("1:查询"); + superKeypad.display("2:存钱"); + superKeypad.display("3:取款"); + superKeypad.display("4:转账"); + superKeypad.display("5:退卡"); + } + +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Main.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Main.java new file mode 100644 index 0000000000..caf9ef2869 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/Main.java @@ -0,0 +1,97 @@ +package com.coderising.ood.atmSimulation.atm; + +import com.coderising.ood.atmSimulation.atm.console.Display; +import com.coderising.ood.atmSimulation.atm.console.KeyBoard; +import com.coderising.ood.atmSimulation.atm.console.SuperKeypad; +import com.coderising.ood.atmSimulation.atm.print.Printer; +import com.coderising.ood.atmSimulation.atm.proxy.BankProxy; +import com.coderising.ood.atmSimulation.atm.proxy.Network; +import com.coderising.ood.atmSimulation.atm.reader.CardReader; +import com.coderising.ood.atmSimulation.atm.slot.CashDepensier; +import com.coderising.ood.atmSimulation.atm.slot.DepositSlot; +import com.coderising.ood.atmSimulation.atm.slot.MoneySlot; +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.bank.account.Account; +import com.coderising.ood.atmSimulation.bank.proxy.ATMProxy; +import com.coderising.ood.atmSimulation.card.Card; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +/** + * @author nvarchar + * date 2017/7/16 + */ +public class Main { + + public static void main(String[] args) { + //mock bank + List accounts = new ArrayList<>(); + Account account = new Account("55005500", "123456", 10000); + accounts.add(account); + Bank bank = new Bank(accounts); + + //mock atmproxy + ATMProxy atmproxy = new ATMProxy(bank); + + //mock network + Network network = new Network(atmproxy); + + //mock bankProxy + BankProxy bankProxy = new BankProxy(network); + + //mock atm + DepositSlot depositSlot = new DepositSlot(); + CashDepensier cashDepensier = new CashDepensier(); + + Display display = new Display(); + KeyBoard keyBoard = new KeyBoard(); + SuperKeypad superKeypad = new SuperKeypad(display, keyBoard); + CardReader cardReader = new CardReader(); + Printer printer = new Printer(); + Atm atm = new Atm(depositSlot, cashDepensier, superKeypad, cardReader, bankProxy, printer); + + MoneySlot.setMoney(1000000); + + //mock card + Card card = new Card("55005500"); + + + atm.insertCard(card); + atm.writePassword(); + + atm.showGuide(); + + Scanner sca = new Scanner(System.in); + + boolean exit = false; + while (!exit) { + int ch = sca.nextInt(); + switch (ch) { + case 1: + atm.query(); + break; + case 2: + atm.deposit(); + break; + case 3: + atm.dependesier(); + break; + case 4: + atm.transfer(); + break; + case 5: + atm.ejectCard(card); + exit = true; + break; + default: + exit = true; + break; + } + } + + atm.print(); + + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/Display.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/Display.java new file mode 100644 index 0000000000..bae9135b4f --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/Display.java @@ -0,0 +1,13 @@ +package com.coderising.ood.atmSimulation.atm.console; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Display { + + public void showMessage(String message) { + System.out.println(message); + } + +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/KeyBoard.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/KeyBoard.java new file mode 100644 index 0000000000..8cbfa6fd71 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/KeyBoard.java @@ -0,0 +1,26 @@ +package com.coderising.ood.atmSimulation.atm.console; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class KeyBoard { + + public String input() { + + BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); + String input = ""; + + try { + input = in.readLine(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return input; + } + +} \ No newline at end of file diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/SuperKeypad.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/SuperKeypad.java new file mode 100644 index 0000000000..97256872da --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/console/SuperKeypad.java @@ -0,0 +1,45 @@ +package com.coderising.ood.atmSimulation.atm.console; + +import com.coderising.ood.atmSimulation.atm.transaction.Trasaction; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class SuperKeypad { + private Display display; + private KeyBoard keyBoard; + + public SuperKeypad() { + } + + public SuperKeypad(Display display, KeyBoard keyBoard) { + this.display = display; + this.keyBoard = keyBoard; + } + + public void display(String message) { + display.showMessage(message); + } + + public String inputPassword() { + display("input your password: "); + String password = keyBoard.input(); + display(password.replaceAll("(?s).", "*")); + return password; + } + + public String inputCardNumber() { + display("input your transfer card number"); + return keyBoard.input(); + } + + public int inputAmount() { + display("input your amount"); + return Integer.valueOf(keyBoard.input()); + } + + public Trasaction getTrasaction() { + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/print/Printer.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/print/Printer.java new file mode 100644 index 0000000000..41d492cc77 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/print/Printer.java @@ -0,0 +1,17 @@ +package com.coderising.ood.atmSimulation.atm.print; + +import com.coderising.ood.atmSimulation.atm.transaction.Trasaction; + +import java.util.List; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Printer { + public void print(List list) { + for (Trasaction trasaction : list) { + System.out.println(trasaction.toPrint()); + } + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/BankProxy.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/BankProxy.java new file mode 100644 index 0000000000..4f227e8959 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/BankProxy.java @@ -0,0 +1,29 @@ +package com.coderising.ood.atmSimulation.atm.proxy; + +import com.coderising.ood.atmSimulation.atm.Atm; +import com.coderising.ood.atmSimulation.atm.transaction.Trasaction; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class BankProxy { + private Network network; + + public BankProxy(Network network) { + this.network = network; + } + + public String process(Trasaction tx, Atm atm) { + String response = network.sendData(tx.toNetWorkPackage(atm)); + return response; + } + + public boolean verify(String account, String password) { + NetPackage netPackage = new NetPackage(account, password); + String response = network.sendData(JsonConvert.encode(netPackage)); + return "true".equals(response); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/Network.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/Network.java new file mode 100644 index 0000000000..a16917db06 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/proxy/Network.java @@ -0,0 +1,20 @@ +package com.coderising.ood.atmSimulation.atm.proxy; + +import com.coderising.ood.atmSimulation.bank.proxy.ATMProxy; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Network { + + private ATMProxy atmProxy; + + public Network(ATMProxy atmProxy) { + this.atmProxy = atmProxy; + } + + public String sendData(String data) { + return atmProxy.getData(data); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/reader/CardReader.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/reader/CardReader.java new file mode 100644 index 0000000000..a347337548 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/reader/CardReader.java @@ -0,0 +1,18 @@ +package com.coderising.ood.atmSimulation.atm.reader; + +import com.coderising.ood.atmSimulation.card.Card; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class CardReader { + + public String readCard(Card card) { + return card.getAccount(); + } + + public void ejectCard(Card card){ + System.out.println("退卡"); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/CashDepensier.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/CashDepensier.java new file mode 100644 index 0000000000..256d4bb911 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/CashDepensier.java @@ -0,0 +1,16 @@ +package com.coderising.ood.atmSimulation.atm.slot; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class CashDepensier { + public boolean hasEnoughMoney(int amount) { + return MoneySlot.getMoney() - amount >= 0; + } + + public boolean dispenseMoney(int amount) { + MoneySlot.minusMoney(amount); + return true; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/DepositSlot.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/DepositSlot.java new file mode 100644 index 0000000000..2841e9f505 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/DepositSlot.java @@ -0,0 +1,12 @@ +package com.coderising.ood.atmSimulation.atm.slot; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class DepositSlot { + public int retriveMoney(int amount) { + //mock put money + return amount; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/MoneySlot.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/MoneySlot.java new file mode 100644 index 0000000000..171f9be15a --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/slot/MoneySlot.java @@ -0,0 +1,28 @@ +package com.coderising.ood.atmSimulation.atm.slot; + +/** + * manage atm money + * + * @author nvarchar + * date 2017/7/15 + */ +public class MoneySlot { + + private static long money; + + public static long getMoney() { + return money; + } + + public static void setMoney(long amount) { + MoneySlot.money = amount; + } + + public static void addMoney(long amount) { + money += amount; + } + + public static void minusMoney(long amount) { + money -= amount; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/DepositTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/DepositTx.java new file mode 100644 index 0000000000..770fe603ea --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/DepositTx.java @@ -0,0 +1,43 @@ +package com.coderising.ood.atmSimulation.atm.transaction; + +import com.coderising.ood.atmSimulation.atm.Atm; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class DepositTx implements Trasaction { + + private int amount; + + public int getAmount() { + return amount; + } + + public DepositTx(int amount) { + this.amount = amount; + } + + @Override + public String toPrint() { + return "存款" + amount; + } + + @Override + public String toNetWorkPackage(Atm atm) { + NetPackage nt = new NetPackage(NetPackage.Type.DEPOSIT, atm, amount, null); + return JsonConvert.encode(nt); + } + + @Override + public boolean preProcess(Atm atm) { + return true; + } + + @Override + public boolean postProcess(Atm atm) { + return false; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/QueryBalanceTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/QueryBalanceTx.java new file mode 100644 index 0000000000..f0b8a54fb7 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/QueryBalanceTx.java @@ -0,0 +1,42 @@ +package com.coderising.ood.atmSimulation.atm.transaction; + +import com.coderising.ood.atmSimulation.atm.Atm; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class QueryBalanceTx implements Trasaction { + + private int amount; + + public QueryBalanceTx() { + } + + public void setAmount(int amount) { + this.amount = amount; + } + + @Override + public String toPrint() { + return "查询账户,余额为:" + amount; + } + + @Override + public String toNetWorkPackage(Atm atm) { + NetPackage nt = new NetPackage(NetPackage.Type.QUERY, atm, null, null); + return JsonConvert.encode(nt); + } + + @Override + public boolean preProcess(Atm atm) { + return true; + } + + @Override + public boolean postProcess(Atm atm) { + return true; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/TransferTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/TransferTx.java new file mode 100644 index 0000000000..c3cb593ccd --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/TransferTx.java @@ -0,0 +1,44 @@ +package com.coderising.ood.atmSimulation.atm.transaction; + +import com.coderising.ood.atmSimulation.atm.Atm; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class TransferTx implements Trasaction { + private String toCard; + private int amount; + + public TransferTx(String toCard, int amount) { + this.toCard = toCard; + this.amount = amount; + } + + public int getAmount() { + return amount; + } + + @Override + public String toPrint() { + return "转账" + amount + "元到" + toCard; + } + + @Override + public String toNetWorkPackage(Atm atm) { + NetPackage nt = new NetPackage(NetPackage.Type.TRANSFER, atm, amount, toCard); + return JsonConvert.encode(nt); + } + + @Override + public boolean preProcess(Atm atm) { + return atm.hasEnoughMoney(getAmount()); + } + + @Override + public boolean postProcess(Atm atm) { + return true; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/Trasaction.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/Trasaction.java new file mode 100644 index 0000000000..c3c58978ce --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/Trasaction.java @@ -0,0 +1,17 @@ +package com.coderising.ood.atmSimulation.atm.transaction; + +import com.coderising.ood.atmSimulation.atm.Atm; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public interface Trasaction { + public String toNetWorkPackage(Atm atm); + + public boolean preProcess(Atm atm); + + public boolean postProcess(Atm atm); + + public String toPrint(); +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/WithdrawTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/WithdrawTx.java new file mode 100644 index 0000000000..c783326e02 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/atm/transaction/WithdrawTx.java @@ -0,0 +1,42 @@ +package com.coderising.ood.atmSimulation.atm.transaction; + +import com.coderising.ood.atmSimulation.atm.Atm; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class WithdrawTx implements Trasaction { + private int amount; + + public WithdrawTx(int amount) { + this.amount = amount; + } + + public int getAmount() { + return amount; + } + + @Override + public String toPrint() { + return "取款" + amount; + } + + @Override + public String toNetWorkPackage(Atm atm) { + NetPackage nt = new NetPackage(NetPackage.Type.WITHDRAW, atm, amount, null); + return JsonConvert.encode(nt); + } + + @Override + public boolean preProcess(Atm atm) { + return atm.hasEnoughMoney(getAmount()); + } + + @Override + public boolean postProcess(Atm atm) { + return atm.dipenseMoney(getAmount()); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/Bank.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/Bank.java new file mode 100644 index 0000000000..02550318bb --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/Bank.java @@ -0,0 +1,97 @@ +package com.coderising.ood.atmSimulation.bank; + +import com.coderising.ood.atmSimulation.bank.account.Account; +import com.coderising.ood.atmSimulation.bank.transaction.DepositTx; +import com.coderising.ood.atmSimulation.bank.transaction.QueryBalanceTx; +import com.coderising.ood.atmSimulation.bank.transaction.TransferTx; +import com.coderising.ood.atmSimulation.bank.transaction.WithdrawTx; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Bank { + private List accounts = new ArrayList<>(); + + public Bank(List accounts) { + this.accounts = accounts; + } + + //查询 + public String query(String cardNumber, String password) { + QueryBalanceTx tx = new QueryBalanceTx(cardNumber, password); + if (tx.preProcess(this)) { + return tx.process(this); + } + tx.postProcess(this); + return null; + } + + //转账 + public String transfer(String cardNumber, String password, + String toCard, int amount) { + TransferTx tx = new TransferTx(cardNumber, password, + toCard, amount); + + if (tx.preProcess(this)) { + return tx.process(this); + } + tx.postProcess(this); + return null; + } + + //取款 + public String withDraw(String cardNumber, String password, + int amount) { + WithdrawTx tx = new WithdrawTx(cardNumber, password, amount); + + if (tx.preProcess(this)) { + return tx.process(this); + } + tx.postProcess(this); + return null; + } + + //存钱 + public String deposit(String cardNumber, String password, + int amount) { + DepositTx tx = new DepositTx(cardNumber, password, amount); + + if (tx.preProcess(this)) { + return tx.process(this); + } + tx.postProcess(this); + return null; + } + + //验证 + public boolean verify(String account, String password) { + return isExist(account, password); + } + + //查询是否 + private boolean isExist(String cardNumber, String password) { + for (Account account : accounts) { + if (cardNumber.equals(account.getCardNumber()) + && password.equals(account.getPassword())) { + return true; + } + } + return false; + } + + //获取账户 + public Account getAccount(String cardNumber, String password) { + for (Account account : accounts) { + if (cardNumber.equals(account.getCardNumber()) + && password.equals(account.getPassword())) { + return account; + } + } + return null; + } + +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/account/Account.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/account/Account.java new file mode 100644 index 0000000000..3bbf50f600 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/account/Account.java @@ -0,0 +1,49 @@ +package com.coderising.ood.atmSimulation.bank.account; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class Account { + private String cardNumber; + private int money; + private String password; + + public Account() { + } + + public Account(String cardNumber, String password, int money) { + this.cardNumber = cardNumber; + this.money = money; + this.password = password; + } + + public String getCardNumber() { + return cardNumber; + } + + public int getMoney() { + return money; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean hasEnoughMoney(int amount) { + return money >= amount; + } + + public boolean dipenseMoney(int amount) { + money -= amount; + return true; + } + + public void retriveMoney(int amount) { + money += amount; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/proxy/ATMProxy.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/proxy/ATMProxy.java new file mode 100644 index 0000000000..a4083ff454 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/proxy/ATMProxy.java @@ -0,0 +1,34 @@ +package com.coderising.ood.atmSimulation.bank.proxy; + +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.serialization.JsonConvert; +import com.coderising.ood.atmSimulation.serialization.NetPackage; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class ATMProxy { + private Bank bank; + + public ATMProxy(Bank bank) { + this.bank = bank; + } + + public String getData(String data) { + NetPackage np = JsonConvert.decode(data); + switch (np.getType()) { + case QUERY: + return bank.query(np.getAccount(), np.getPassword()); + case Verify: + return String.valueOf(bank.verify(np.getAccount(), np.getPassword())); + case DEPOSIT: + return bank.deposit(np.getAccount(), np.getPassword(), np.getAmount()); + case TRANSFER: + return bank.transfer(np.getAccount(), np.getPassword(), np.getToCard(), np.getAmount()); + case WITHDRAW: + return bank.withDraw(np.getAccount(), np.getPassword(), np.getAmount()); + } + return "no such method"; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/DepositTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/DepositTx.java new file mode 100644 index 0000000000..636df1e60d --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/DepositTx.java @@ -0,0 +1,38 @@ +package com.coderising.ood.atmSimulation.bank.transaction; + +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.bank.account.Account; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class DepositTx implements Trasaction { + + private String account; + private String password; + private int amount; + + public DepositTx(String account, String password, int amount) { + this.account = account; + this.password = password; + this.amount = amount; + } + + @Override + public boolean preProcess(Bank bank) { + return true; + } + + @Override + public boolean postProcess(Bank bank) { + return true; + } + + @Override + public String process(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + queryAccount.retriveMoney(amount); + return String.valueOf(queryAccount.getMoney()); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/QueryBalanceTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/QueryBalanceTx.java new file mode 100644 index 0000000000..c14bac18e0 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/QueryBalanceTx.java @@ -0,0 +1,38 @@ +package com.coderising.ood.atmSimulation.bank.transaction; + +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.bank.account.Account; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class QueryBalanceTx implements Trasaction { + + private String account; + private String password; + + public QueryBalanceTx(String account, String password) { + this.account = account; + this.password = password; + } + + @Override + public boolean preProcess(Bank bank) { + return true; + } + + @Override + public boolean postProcess(Bank bank) { + return false; + } + + @Override + public String process(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + if (account != null) { + return String.valueOf(queryAccount.getMoney()); + } + return null; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/TransferTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/TransferTx.java new file mode 100644 index 0000000000..91d0b82ed8 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/TransferTx.java @@ -0,0 +1,42 @@ +package com.coderising.ood.atmSimulation.bank.transaction; + +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.bank.account.Account; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class TransferTx implements Trasaction { + + private String account; + private String password; + private String toCard; + private int amount; + + public TransferTx(String account, String password, String toCard, int amount) { + this.account = account; + this.password = password; + this.toCard = toCard; + this.amount = amount; + } + + @Override + public boolean preProcess(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + return queryAccount.hasEnoughMoney(amount); + } + + @Override + public boolean postProcess(Bank bank) { + return true; + } + + @Override + public String process(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + queryAccount.dipenseMoney(amount); + //mock add money to toCard + return String.valueOf(queryAccount.getMoney()); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/Trasaction.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/Trasaction.java new file mode 100644 index 0000000000..cd09230fd3 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/Trasaction.java @@ -0,0 +1,16 @@ +package com.coderising.ood.atmSimulation.bank.transaction; + +import com.coderising.ood.atmSimulation.bank.Bank; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public interface Trasaction { + + public boolean preProcess(Bank bank); + + public boolean postProcess(Bank bank); + + public String process(Bank bank); +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/WithdrawTx.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/WithdrawTx.java new file mode 100644 index 0000000000..5ff8efec7a --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/bank/transaction/WithdrawTx.java @@ -0,0 +1,39 @@ +package com.coderising.ood.atmSimulation.bank.transaction; + +import com.coderising.ood.atmSimulation.bank.Bank; +import com.coderising.ood.atmSimulation.bank.account.Account; + +/** + * @author nvarchar + * date 2017/7/14 + */ +public class WithdrawTx implements Trasaction{ + + private String account; + private String password; + private int amount; + + public WithdrawTx(String account, String password, int amount) { + this.account = account; + this.password = password; + this.amount = amount; + } + + @Override + public boolean preProcess(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + return queryAccount.hasEnoughMoney(amount); + } + + @Override + public boolean postProcess(Bank bank) { + return true; + } + + @Override + public String process(Bank bank) { + Account queryAccount = bank.getAccount(account, password); + queryAccount.dipenseMoney(amount); + return String.valueOf(queryAccount.getMoney()); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/card/Card.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/card/Card.java new file mode 100644 index 0000000000..e1103c02ef --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/card/Card.java @@ -0,0 +1,17 @@ +package com.coderising.ood.atmSimulation.card; + +/** + * @author nvarchar + * date 2017/7/15 + */ +public class Card { + private String account; + + public Card(String account) { + this.account = account; + } + + public String getAccount() { + return account; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/JsonConvert.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/JsonConvert.java new file mode 100644 index 0000000000..be1934944b --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/JsonConvert.java @@ -0,0 +1,19 @@ +package com.coderising.ood.atmSimulation.serialization; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + +/** + * @author nvarchar + * date 2017/7/16 + */ +public class JsonConvert { + + public static String encode(NetPackage np) { + return JSON.toJSONString(np); + } + + public static NetPackage decode(String code) { + return JSONObject.parseObject(code, NetPackage.class); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/NetPackage.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/NetPackage.java new file mode 100644 index 0000000000..99246a3d41 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderising/ood/atmSimulation/serialization/NetPackage.java @@ -0,0 +1,76 @@ +package com.coderising.ood.atmSimulation.serialization; + +import com.coderising.ood.atmSimulation.atm.Atm; + +/** + * @author nvarchar + * date 2017/7/16 + */ +public class NetPackage { + + public enum Type {Verify, QUERY, TRANSFER, DEPOSIT, WITHDRAW} + + private String account; + private String password; + private Integer amount; + private Type type; + private String toCard; + + public void setAccount(String account) { + this.account = account; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public void setType(Type type) { + this.type = type; + } + + public void setToCard(String toCard) { + this.toCard = toCard; + } + + public String getAccount() { + return account; + } + + public String getPassword() { + return password; + } + + public Integer getAmount() { + return amount; + } + + public Type getType() { + return type; + } + + public String getToCard() { + return toCard; + } + + public NetPackage(Type type, Atm atm, Integer amount, String toCard) { + this.account = atm.getAccount(); + this.password = atm.getPassword(); + this.amount = amount; + this.type = type; + this.toCard = toCard; + } + + public NetPackage(String account, String password) { + this.type = Type.Verify; + this.account = account; + this.password = password; + } + + public NetPackage() { + } +} + From 5d7ace3fba015465de97fdb8e42d9f4e20e23244 Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Mon, 17 Jul 2017 23:37:15 +0800 Subject: [PATCH 03/23] =?UTF-8?q?Builder=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coderising/myood/builder/TagBuilder.java | 37 +++++++++ .../myood/builder/TagBuilderTest.java | 45 ++++++++++ .../com/coderising/myood/builder/TagNode.java | 83 +++++++++++++++++++ .../coderising/myood/builder/tagExample.xml | 9 ++ 4 files changed, 174 insertions(+) create mode 100644 students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java create mode 100644 students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java create mode 100644 students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java create mode 100644 students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java new file mode 100644 index 0000000000..11c5792908 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java @@ -0,0 +1,37 @@ +package com.coderising.myood.builder; + +public class TagBuilder { + private TagNode rootNode; + private TagNode tagNode; + private TagNode parentTagNode; + public TagBuilder(String rootTagName){ + tagNode = new TagNode(rootTagName); + rootNode = tagNode; + } + + public TagBuilder addChild(String childTagName){ + TagNode newTagNode = new TagNode(childTagName); + tagNode.add(newTagNode); + parentTagNode = tagNode; + tagNode = newTagNode; + return this; + } + public TagBuilder addSibling(String siblingTagName){ + TagNode newTagNode = new TagNode(siblingTagName); + parentTagNode.add(newTagNode); + tagNode = newTagNode; + return this; + + } + public TagBuilder setAttribute(String name, String value){ + tagNode.setAttribute(name, value); + return this; + } + public TagBuilder setText(String value){ + tagNode.setValue(value); + return this; + } + public String toXML(){ + return rootNode.toXML(); + } +} diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java new file mode 100644 index 0000000000..cb80841992 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java @@ -0,0 +1,45 @@ +package com.coderising.myood.builder; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TagBuilderTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + + TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .addSibling("line-item").setAttribute("pid", "P4455").setAttribute("qty", "12") + .addChild("child-line-item").setAttribute("pid", "P3333").setAttribute("qty", "15") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + assertEquals(expected, xml); + } + +} diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java b/students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java new file mode 100644 index 0000000000..a9bb180a30 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java @@ -0,0 +1,83 @@ +package com.coderising.myood.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + return; + } + + attributes.add(new Attribute(name,value)); + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + private static class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); // 递归 + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } +} diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml b/students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml new file mode 100644 index 0000000000..839e62ddee --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file From d20ea1984670ad243c0cea82be024162f6ebac28 Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Tue, 18 Jul 2017 22:34:24 +0800 Subject: [PATCH 04/23] =?UTF-8?q?=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8Finit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myknowledgepoint/regex/Utils.java | 27 ++ .../myknowledgepoint/regex/UtilsTest.java | 316 ++++++++++++++++++ .../coderising/myood/builder/TagBuilder.java | 2 +- students/812350401/src/main/resource/01.txt | 2 + students/812350401/src/main/resource/07.txt | 5 + 5 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/Utils.java create mode 100644 students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java create mode 100644 students/812350401/src/main/resource/01.txt create mode 100644 students/812350401/src/main/resource/07.txt diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/Utils.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/Utils.java new file mode 100644 index 0000000000..b4c8bbddfc --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/Utils.java @@ -0,0 +1,27 @@ +package com.coderising.myknowledgepoint.regex; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +public class Utils { + + public static String readAllFromResouce(String resourceName) { + byte[] fileContentBytes; + try { + Path path = Paths.get(ClassLoader.getSystemResource(resourceName).toURI()); + fileContentBytes = Files.readAllBytes(path); + String fileContentStr = new String(fileContentBytes, StandardCharsets.UTF_8); + + return fileContentStr; + } catch (IOException | URISyntaxException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return ""; + } +} diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java new file mode 100644 index 0000000000..4b5c53b5a9 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java @@ -0,0 +1,316 @@ +package com.coderising.myknowledgepoint.regex; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +// http://www.cnblogs.com/playing/archive/2011/03/15/1984943.html + +public class UtilsTest { + + /** + * 多行模式-1 + */ + @Test + public void test01_01() { + String t1 = Utils.readAllFromResouce("01.txt"); + + // 默认 单行模式 + Pattern p1 = Pattern.compile("^def$"); + Matcher m1 = p1.matcher(t1); + + if (m1.find()) { + System.out.println("found!"); + } else { + System.out.println("not found!"); + } + } + + /** + *
+	 * 多行模式-2 
+	 *  (?m)		Pattern.MULTILINE
+	 * 
+ */ + @Test + public void test01_02() { + String t1 = Utils.readAllFromResouce("01.txt"); + + // 多行模式 写法一 + // Pattern p1 = Pattern.compile("(?m)^def$"); + // 多行模式 写法二 + Pattern p1 = Pattern.compile("^def$", Pattern.MULTILINE); + + Matcher m1 = p1.matcher(t1); + + if (m1.find()) { + System.out.println("found!"); + } else { + System.out.println("not found!"); + } + } + + /** + * flag设定和(?X)的等价关系 + * + *
+	 *  (?m)		Pattern.MULTILINE
+	 *  (?i)		Pattern.CASE_INSENSITIVE
+	 *  (?u)		Pattern.UNICODE_CASE
+	 *  (?s)		Pattern.DOTALL
+	 *  (?d)		Pattern.UNIX_LINES
+	 *  (?x)		Pattern.COMMENTS
+	 * 
+ */ + + /** + *
+	 * ascii大小写
+	 *  (?i)		Pattern.CASE_INSENSITIVE
+	 * 
+ */ + @Test + public void test02_01() { + String t1 = "abc AbC aCd abc ABc 2343"; + String r1 = "abc"; + + // 默认 区分大小写 + // Pattern p1 = Pattern.compile(r1); + + // 忽略ascii大小,写法一 + Pattern p1 = Pattern.compile("(?i)abc"); + + // 忽略ascii大小,写法而 + // Pattern p1 = Pattern.compile(r1, Pattern.CASE_INSENSITIVE ); + + Matcher m1 = p1.matcher(t1); + + while (m1.find()) { + System.out.println(m1.group()); + } + } + + /** + *
+	 * unicode大小写
+	 *  (?u)		Pattern.UNICODE_CASE
+	 * 
+ */ + @Test + public void test03_01() { + String t1 = "abc AbC aCd abc ABc 2343"; + String r1 = "abc";// 日文输入法下,全角abc,也就是宽字体 + + // 默认 区分大小写只适用于ascii + // Pattern p1 = Pattern.compile((?i)abc); + + // 忽略ascii大小,写法一 + Pattern p1 = Pattern.compile("(?iu)abc"); + + // 忽略ascii大小,写法而 + // Pattern p1 = Pattern.compile(r1, Pattern.UNICODE_CASE); + + Matcher m1 = p1.matcher(t1); + + while (m1.find()) { + System.out.println(m1.group()); + } + } + + /** 通过设定标志位忽略大小写 */ + @Test + public void test03_02() { + String t1 = "abc AbC aCd\nABCD 2343"; + String r1 = "(?i)(?m)abc"; + Pattern p1 = Pattern.compile(r1); + Matcher m1 = p1.matcher(t1); + + while (m1.find()) { + System.out.println(m1.group()); + } + } + + @Test + public void test04_01_dotall() { + Pattern p = null; + Matcher m = null; + + String text1 = "width height"; + String text2 = "width\nheight"; + // Pattern p = Pattern.compile("(?s)width.height"); + p = Pattern.compile("width.height", Pattern.DOTALL); + + m = p.matcher(text1); + boolean result1 = m.find(); + if (result1) { + System.out.println("text1 found"); + } else { + System.out.println("text1 not found"); + } + + m = p.matcher(text2); + boolean result2 = m.find(); + if (result2) { + System.out.println("text2 found"); + } else { + System.out.println("text2 not found"); + } + } + + /** + * group + * + *
+	 * group(0):正则表达式的匹配值 
+	 * group(1):第一个子串
+	 * 
+ */ + @Test + public void test05_01() { + Pattern p = Pattern.compile("([a-z]+)-(\\d+)"); + Matcher m = p.matcher("type x-235, type y-3, type zw-465"); + + while (m.find()) { + for (int i = 0; i < m.groupCount() + 1; i++) { + System.out.println("group(" + i + ")=" + m.group(i)); + } + System.out.println("---------------------"); + } + } + + /** + * 字符串分割的例子 + */ + @Test + public void test05_02() { + String abc = "a///b/c"; + + // 分割后的数组中包含空字符 + String[] array1 = abc.split("/"); + for (String str : array1) { + System.out.println(str); + } + + System.out.println("---------------------"); + + // 分割后的数组中取出了空字符 + String[] array2 = abc.split("/+"); + for (String str : array2) { + System.out.println(str); + } + } + + /** + * 替换 + */ + @Test + public void test06_01() { + String str = "Orange is 100yuan, Banana is 180 yuan."; + String regex = "\\d+\\s*yuan"; + Pattern p = Pattern.compile(regex); + + Matcher m = p.matcher(str); + System.out.println(m.find()); + String result = m.replaceFirst("_$0_"); + + System.out.println(result); + } + + /** + * 替换 + */ + @Test + public void test06_02() { + String str = "Orange is 100yuan, Banana is 180 yuan."; + String regex = "(\\d)\\s*(yuan)"; + + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(str); + + String result = m.replaceAll("$2_$1"); + + System.out.println(result); + } + + /** + * 命名分组,替换 + */ + @Test + public void test06_03() { + String pathfFilename = "aa/notepad.exe"; + + String regex = "^.+/(?.+)$"; + String replacement = "${filename}"; + + String filename = pathfFilename.replaceFirst(regex, replacement); + System.out.println(filename); + } + + /** + * 从文本中读取多行数据后,建议先把回车符删掉 + */ + @Test + public void test07_01() { + String t1 = Utils.readAllFromResouce("07.txt"); + System.out.println("--orignal text start--"); + System.out.print(t1); + System.out.println("--orignal text end --"); + + // 统一换行符 + String ret1 = t1.replaceAll("(\r\n)|\r", "\n"); + System.out.println("--统一换行符 start--"); + System.out.print(ret1); + System.out.println("--统一换行符 end --"); + + // 行单位前后trim + String ret2 = ret1.replaceAll("(?m)^\\s*(.*?)\\s*$", "$1"); + System.out.println("--行单位前后trim start--"); + System.out.println(ret2); + System.out.println("--行单位前后trim end --"); + + assertFalse(ret2.equals(t1)); + } + + @Test + public void test01_04_Zz() { + Pattern p = null; + Matcher m = null; + boolean result1 = false; + boolean result2 = false; + boolean result3 = false; + + String text1 = "abc def"; + String text2 = "def abc"; + String text3 = "def abc\n"; + + p = Pattern.compile("abc\\z"); + + m = p.matcher(text1); + result1 = m.find(); + + m = p.matcher(text2); + result2 = m.find(); + + m = p.matcher(text3); + result3 = m.find(); + + p = Pattern.compile("abc\\Z"); + + m = p.matcher(text1); + result1 = m.find(); + + m = p.matcher(text2); + result2 = m.find(); + + m = p.matcher(text3); + result3 = m.find(); + + assertFalse(result1); + assertTrue(result2); + assertTrue(result3); + } +} diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java index 11c5792908..ebfe9fe12b 100644 --- a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java +++ b/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java @@ -12,7 +12,7 @@ public TagBuilder(String rootTagName){ public TagBuilder addChild(String childTagName){ TagNode newTagNode = new TagNode(childTagName); tagNode.add(newTagNode); - parentTagNode = tagNode; + parentTagNode = tagNode; tagNode = newTagNode; return this; } diff --git a/students/812350401/src/main/resource/01.txt b/students/812350401/src/main/resource/01.txt new file mode 100644 index 0000000000..5f5521fae2 --- /dev/null +++ b/students/812350401/src/main/resource/01.txt @@ -0,0 +1,2 @@ +abc +def diff --git a/students/812350401/src/main/resource/07.txt b/students/812350401/src/main/resource/07.txt new file mode 100644 index 0000000000..be72da22ea --- /dev/null +++ b/students/812350401/src/main/resource/07.txt @@ -0,0 +1,5 @@ + abc +def + +gh + From 27b07bef810972637d484d60817b15bc6f1c317c Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Tue, 18 Jul 2017 23:42:39 +0800 Subject: [PATCH 05/23] =?UTF-8?q?regex=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myknowledgepoint/regex/UtilsTest.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java index 4b5c53b5a9..7fc9d6de0b 100644 --- a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java @@ -111,7 +111,7 @@ public void test03_01() { // 忽略ascii大小,写法一 Pattern p1 = Pattern.compile("(?iu)abc"); - // 忽略ascii大小,写法而 + // 忽略ascii大小,写法二 // Pattern p1 = Pattern.compile(r1, Pattern.UNICODE_CASE); Matcher m1 = p1.matcher(t1); @@ -142,7 +142,7 @@ public void test04_01_dotall() { String text1 = "width height"; String text2 = "width\nheight"; // Pattern p = Pattern.compile("(?s)width.height"); - p = Pattern.compile("width.height", Pattern.DOTALL); + p = Pattern.compile("width.height", Pattern.DOTALL); // 让.也能匹配换行符 m = p.matcher(text1); boolean result1 = m.find(); @@ -190,7 +190,7 @@ public void test05_02() { String abc = "a///b/c"; // 分割后的数组中包含空字符 - String[] array1 = abc.split("/"); + String[] array1 = abc.split("/"); // 可以直接写正则 for (String str : array1) { System.out.println(str); } @@ -198,7 +198,7 @@ public void test05_02() { System.out.println("---------------------"); // 分割后的数组中取出了空字符 - String[] array2 = abc.split("/+"); + String[] array2 = abc.split("/+"); // 贪婪匹配斜杠"///" for (String str : array2) { System.out.println(str); } @@ -226,7 +226,7 @@ public void test06_01() { @Test public void test06_02() { String str = "Orange is 100yuan, Banana is 180 yuan."; - String regex = "(\\d)\\s*(yuan)"; + String regex = "(\\d+)\\s*(yuan)"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); @@ -248,6 +248,15 @@ public void test06_03() { String filename = pathfFilename.replaceFirst(regex, replacement); System.out.println(filename); + + // 法2 + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(pathfFilename); + + String result = m.replaceFirst(replacement); + + System.out.println(result); + } /** @@ -287,18 +296,21 @@ public void test01_04_Zz() { String text2 = "def abc"; String text3 = "def abc\n"; - p = Pattern.compile("abc\\z"); + p = Pattern.compile("abc\\z"); // \z: asserts position at the end of the string m = p.matcher(text1); result1 = m.find(); + assertFalse(result1); m = p.matcher(text2); result2 = m.find(); + assertTrue(result2); m = p.matcher(text3); result3 = m.find(); + assertFalse(result3); - p = Pattern.compile("abc\\Z"); + p = Pattern.compile("abc\\Z"); // \Z: asserts position at the end of the string, or before the line terminator right at the end of the string (if any) m = p.matcher(text1); result1 = m.find(); From 9f32ea3b6d60a82bdd3c35cc03ed6120ba90bc9e Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Wed, 19 Jul 2017 01:14:31 +0800 Subject: [PATCH 06/23] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E6=9B=BF=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myknowledgepoint/regex/UtilsTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java index 7fc9d6de0b..ca61d7ae71 100644 --- a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java @@ -3,6 +3,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.util.HashMap; +import java.util.Map; +import java.util.StringJoiner; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -325,4 +328,32 @@ public void test01_04_Zz() { assertTrue(result2); assertTrue(result3); } + + @Test + public void testTemplate() { + String origin = "【工银信用卡】于${startTime}至${endTime}申办奋斗卡,无年费,赢郎平签名排球!详情${link}"; + Map map = new HashMap() { + { + put("startTime", "昨天"); + put("endTime", "今天"); + put("link", "没有"); + } + }; + String newStr = renderTemplate(origin, map); + assertTrue(newStr.equals("【工银信用卡】于昨天至今天申办奋斗卡,无年费,赢郎平签名排球!详情没有")); + } + + private String renderTemplate(String origin, Map map) { + Pattern p = Pattern.compile("\\$\\{(.*?)\\}"); + Matcher m = p.matcher(origin); + String newStr = origin; + Matcher newM; + String match; + while (m.find()) { + match = m.group(1); + newM = p.matcher(newStr); + newStr = newM.replaceFirst(map.get(match)); + } + return newStr; + } } From b9815bb4b92013370be733556dea67a4b417060b Mon Sep 17 00:00:00 2001 From: jy <977996067@qq.com> Date: Wed, 19 Jul 2017 23:06:38 +0800 Subject: [PATCH 07/23] Add Builder homework --- students/977996067/pom.xml | 24 +++++ .../com/coderising/dp/week1/TagBuilder.java | 63 +++++++++++++ .../java/com/coderising/dp/week1/TagNode.java | 91 +++++++++++++++++++ .../com/coderising/dp/week1/TagNodeTest.java | 20 ++++ 4 files changed, 198 insertions(+) create mode 100644 students/977996067/pom.xml create mode 100644 students/977996067/src/main/java/com/coderising/dp/week1/TagBuilder.java create mode 100644 students/977996067/src/main/java/com/coderising/dp/week1/TagNode.java create mode 100644 students/977996067/src/test/java/com/coderising/dp/week1/TagNodeTest.java diff --git a/students/977996067/pom.xml b/students/977996067/pom.xml new file mode 100644 index 0000000000..2c2630e332 --- /dev/null +++ b/students/977996067/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + cc.javaone.coding2017 + ood-assignment + 1.0-SNAPSHOT + + + junit + junit + 4.12 + + + org.projectlombok + lombok + 1.16.18 + + + + + \ No newline at end of file diff --git a/students/977996067/src/main/java/com/coderising/dp/week1/TagBuilder.java b/students/977996067/src/main/java/com/coderising/dp/week1/TagBuilder.java new file mode 100644 index 0000000000..a31514a6fe --- /dev/null +++ b/students/977996067/src/main/java/com/coderising/dp/week1/TagBuilder.java @@ -0,0 +1,63 @@ +package com.coderising.dp.week1; + +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class TagBuilder { + + private TagNode rootTag; + + private AtomicReference tempParentNode = new AtomicReference<>(); + + private AtomicReference currentNode = new AtomicReference<>(); + + public TagBuilder(String rootTagName) { + this.rootTag = new TagNode(); + rootTag.setTagName(rootTagName); + tempParentNode.set(rootTag); + currentNode.set(rootTag); + } + + public TagBuilder addChild(String childTagName) { + TagNode node = currentNode.get(); + tempParentNode.set(node); + currentNode.set(doAddChildren(node, childTagName)); + return this; + } + + private TagNode doAddChildren(TagNode node, String childTagName) { + List children = node.getChildren(); + TagNode childTag = new TagNode(); + childTag.setTagName(childTagName); + children.add(childTag); + return childTag; + } + + public TagBuilder addSibling(String childTagName) { + TagNode tagNode = tempParentNode.get(); + TagNode childTag = doAddChildren(tagNode, childTagName); + currentNode.set(childTag); + return this; + } + + public TagBuilder setAttribute(String key, String value) { + TagNode tagNode = currentNode.get(); + List attributes = tagNode.getAttributes(); + + TagNode.Attribute attribute = new TagNode.Attribute(); + attribute.setName(key); + attribute.setValue(value); + attributes.add(attribute); + return this; + } + + public String toXML() { + return rootTag.toString(); + } +} + + +// ~ HomeWork2 +// ======================================================================================================== + +// 单例的类: java.lang.Runtime \ No newline at end of file diff --git a/students/977996067/src/main/java/com/coderising/dp/week1/TagNode.java b/students/977996067/src/main/java/com/coderising/dp/week1/TagNode.java new file mode 100644 index 0000000000..6fa56abfdf --- /dev/null +++ b/students/977996067/src/main/java/com/coderising/dp/week1/TagNode.java @@ -0,0 +1,91 @@ +package com.coderising.dp.week1; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public String getTagValue() { + return tagValue; + } + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public List getAttributes() { + return attributes; + } + + public void setAttributes(List attributes) { + this.attributes = attributes; + } + + public static class Attribute { + String name; + String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + + @Override + public String toString() { + String lineBreaker = System.getProperty("line.separator"); + StringBuilder sb = new StringBuilder(); + sb.append("<").append(this.tagName); + if (!isEmpty(this.attributes)) { + attributes.forEach(attribute -> sb.append(" ") + .append(attribute.getName()) + .append("=\"") + .append(attribute.getValue()) + .append("\"")); + } + sb.append(">"); + if (!isEmpty(this.children)) { + sb.append(lineBreaker); + children.forEach(child -> sb.append(child.toString())); + } + sb.append(lineBreaker).append("").append(lineBreaker); + return sb.toString(); + + } + + private boolean isEmpty(Collection c) { + return c == null || c.size() == 0; + } +} diff --git a/students/977996067/src/test/java/com/coderising/dp/week1/TagNodeTest.java b/students/977996067/src/test/java/com/coderising/dp/week1/TagNodeTest.java new file mode 100644 index 0000000000..554ae1fda4 --- /dev/null +++ b/students/977996067/src/test/java/com/coderising/dp/week1/TagNodeTest.java @@ -0,0 +1,20 @@ +package com.coderising.dp.week1; + +import org.junit.Test; + +public class TagNodeTest { + + @Test + public void testBuilder() { + + TagBuilder builder = new TagBuilder("order"); + + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "p3333").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "p9876").setAttribute("qty", "10") + .toXML(); + + System.out.println(xml); + } +} \ No newline at end of file From 10cd690743cd09bc97b5dc3d230a06736dfb6ff1 Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Thu, 20 Jul 2017 00:35:00 +0800 Subject: [PATCH 08/23] =?UTF-8?q?=E6=AD=A3=E5=88=992?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myknowledgepoint/regex/UtilsTest.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java index ca61d7ae71..7fa02e77a6 100644 --- a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java @@ -1,11 +1,13 @@ package com.coderising.myknowledgepoint.regex; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map; -import java.util.StringJoiner; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -356,4 +358,44 @@ private String renderTemplate(String origin, Map map) { } return newStr; } + + @Test + public void testReverseTemplate() { + String origin = "【工银信用卡】于${startTime}至${endTime}申办奋斗卡,\n" + + "无年费,赢郎平签名排球!详情${link}."; + String newStr = "【工银信用卡】于昨天至今天申办奋斗卡,\n" + + "无年费,赢郎平签名排球!详情没有."; + Map map = extractTemplateMap(origin, newStr); + Map map2 = new HashMap() { + { + put("startTime", "昨天"); + put("endTime", "今天"); + put("link", "没有"); + } + }; + assertEquals( map, map2 ); + } + + private Map extractTemplateMap(String origin, String newStr) { + Map map = new HashMap<>(10); + List keys = new LinkedList<>(); + Pattern p1 = Pattern.compile("\\$\\{(\\w+)\\}"); + Matcher m1 = p1.matcher(origin); + while (m1.find()) { + keys.add(m1.group(1)); + } + String newRegex = m1.replaceAll("(.*)"); // newRegex = "【工银信用卡】于(.*)至(.*)申办奋斗卡,无年费,赢郎平签名排球!详情(.*)." + Pattern p2 = Pattern.compile(newRegex); + Matcher m2 = p2.matcher(newStr); + int index = 0; + while (m2.find()) { + for (int i = 1; i <= m2.groupCount(); i++) { + map.put(keys.get(index), m2.group(i)); + index++; + } + } + return map; + } + + } From 27d3f8644bb4c6e68db40396d00c6c07cb9f6627 Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Thu, 20 Jul 2017 01:27:43 +0800 Subject: [PATCH 09/23] Little fix --- .../streams/EntrySetTest.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 students/812350401/src/main/java/com/coderising/myknowledgepoint/streams/EntrySetTest.java diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/streams/EntrySetTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/streams/EntrySetTest.java new file mode 100644 index 0000000000..6287afea7e --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/streams/EntrySetTest.java @@ -0,0 +1,35 @@ +package com.coderising.myknowledgepoint.streams; + +import org.junit.Test; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created by thomas_young on 20/7/2017. + */ +public class EntrySetTest { + @Test + public void test1() { + System.out.println("----test1----"); + Map map = new HashMap<>(); + map.put("01", "zhangsan"); + map.put("02", "lisi"); + map.put("03", "wangwu"); + Collection collection = map.keySet(); // 返回值是个值的Collection集合 + collection.stream().forEach(key -> System.out.println(key + ": " + map.get(key))); + } + + @Test + public void test2() { + System.out.println("----test2----"); + Map map = new HashMap<>(); + map.put("01", "zhangsan"); + map.put("02", "lisi"); + map.put("03", "wangwu"); + Set> entrySet = map.entrySet(); + entrySet.stream().forEach(entry -> System.out.println(entry.getKey() + ": " + entry.getValue())); + } +} From 8b1df6c06d485c27e6e7cf4433cf064eed4e5a5a Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Thu, 20 Jul 2017 02:11:09 +0800 Subject: [PATCH 10/23] =?UTF-8?q?=E6=AD=A3=E5=88=99=E8=A1=A8=E8=BE=BE?= =?UTF-8?q?=E5=BC=8F3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../myknowledgepoint/regex/UtilsTest.java | 94 +++++++++++++++++-- 1 file changed, 86 insertions(+), 8 deletions(-) diff --git a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java index 7fa02e77a6..6f8a39a806 100644 --- a/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java +++ b/students/812350401/src/main/java/com/coderising/myknowledgepoint/regex/UtilsTest.java @@ -4,13 +4,11 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.junit.Ignore; import org.junit.Test; // http://www.cnblogs.com/playing/archive/2011/03/15/1984943.html @@ -362,9 +360,9 @@ private String renderTemplate(String origin, Map map) { @Test public void testReverseTemplate() { String origin = "【工银信用卡】于${startTime}至${endTime}申办奋斗卡,\n" + - "无年费,赢郎平签名排球!详情${link}."; + "无年费,赢郎平签名排球!详情${link}"; String newStr = "【工银信用卡】于昨天至今天申办奋斗卡,\n" + - "无年费,赢郎平签名排球!详情没有."; + "无年费,赢郎平签名排球!详情没有"; Map map = extractTemplateMap(origin, newStr); Map map2 = new HashMap() { { @@ -374,17 +372,23 @@ public void testReverseTemplate() { } }; assertEquals( map, map2 ); + + // 我的方法无法用于下面的代码 +// origin = "(【工银信用卡】于${startTime}至${endTime}申办奋斗卡,无年费,赢郎平签名排球!详情${link}."; +// newStr = "(【工银信用卡】于昨天至今天申办奋斗卡,无年费,赢郎平签名排球!详情没有."; +// map = extractTemplateMap(origin, newStr); +// System.out.println(map); } private Map extractTemplateMap(String origin, String newStr) { Map map = new HashMap<>(10); List keys = new LinkedList<>(); - Pattern p1 = Pattern.compile("\\$\\{(\\w+)\\}"); + Pattern p1 = Pattern.compile("\\$\\{(.+?)\\}"); Matcher m1 = p1.matcher(origin); while (m1.find()) { keys.add(m1.group(1)); } - String newRegex = m1.replaceAll("(.*)"); // newRegex = "【工银信用卡】于(.*)至(.*)申办奋斗卡,无年费,赢郎平签名排球!详情(.*)." + String newRegex = "^" + m1.replaceAll("(.*?)") + "$"; // newRegex = "【工银信用卡】于(.*?)至(.*?)申办奋斗卡,无年费,赢郎平签名排球!详情(.*?)." Pattern p2 = Pattern.compile(newRegex); Matcher m2 = p2.matcher(newStr); int index = 0; @@ -397,5 +401,79 @@ private Map extractTemplateMap(String origin, String newStr) { return map; } + @Test + public void test_template_string() { + String tmpl = null; + String text = null; + + // test data 1 + tmpl = "【工银信用卡】于${startTime}至${endTime}申办奋斗卡,无年费,赢郎平签名排球!详情${link}."; + text = "【工银信用卡】于昨天至今天申办奋斗卡,无年费,赢郎平签名排球!详情没有."; + + // test data 2 + tmpl = "a${startTime}b${endTime}"; + text = "abbc"; + + // test data 3 + tmpl = "(${startTime}至)${endTime}."; + text = "(昨天至)今天."; + + System.out.println("模板字符串:" + tmpl); + System.out.println("文本字符串:" + text); + System.out.println(); + + // 模板字符串中变量的正则表达式 + String keyRegex = "\\$\\{.*?\\}"; + + // 找出模板字符串中变量 + List keyList = new ArrayList<>(); + { + Pattern p = Pattern.compile(keyRegex); + Matcher m = p.matcher(tmpl); + + while (m.find()) { + keyList.add(m.group()); + } + } + + // 找出文本字符串中替换值集合 + List valueList = new ArrayList<>(); + { + // **关键想法** 把模板字符串改装成正则表达式 + + // ** 难点** + // 如果字符串中有元字符,改装后的正则表达式会有语法错误。 + // 例子:如果模板字符串中仅存在一个(,该装后的正则表达式会有语法错误。 + // 所以在每一个字符前都加\,这样(就变成\(,变成匹配(,符合原意。 + // 但是如果模板字符串中仅存在一个t,变成了\t,变成了匹配tab键,又出现了错误。 + // 结合以上的说明,我们要有选择的在字符前加\, 我们在非数字字母的字符前加\ + String tmplEscape = tmpl.replaceAll("([^\\w])", "\\\\$1"); + + // 在原始模板字符串中的占位符中的非数字字母的字符前, + // 已经被加\,所以占位符的正则表达式也要做相应的编辑 + String keyRegexEscape = "\\\\\\$\\\\\\{.*?\\\\\\}"; + + String tmplRegex = "^" + tmplEscape.replaceAll(keyRegexEscape, "(.*?)") + "$"; + System.out.println("模板字符串改装后的正则表达式:" + tmplRegex); + System.out.println(); + // 注: "\至" 也匹配 "至" + Pattern p = Pattern.compile(tmplRegex); + Matcher m = p.matcher(text); + if (m.find()) { + for (int i = 1; i <= m.groupCount(); i++) { + valueList.add(m.group(i)); + } + } + } + + // 输出结果 + if (valueList.isEmpty()) { + System.out.println("the text file format is not correct"); + } else { + for (int i = 0; i < keyList.size(); i++) { + System.out.println(keyList.get(i) + "\t\t" + valueList.get(i)); + } + } + } } From 57a340647fe796ca8a6d9a1fea84205ed9c788bc Mon Sep 17 00:00:00 2001 From: GordenChow <513274874@qq.com> Date: Fri, 21 Jul 2017 09:05:05 +0800 Subject: [PATCH 11/23] =?UTF-8?q?=E6=8F=90=E4=BA=A4builder=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/coderising/ood/builder/Attribute.java | 11 +++ .../coderising/ood/builder/TagBuilder.java | 46 +++++++++++ .../ood/builder/TagBuilderTest.java | 40 ++++++++++ .../com/coderising/ood/builder/TagNode.java | 78 +++++++++++++++++++ 4 files changed, 175 insertions(+) create mode 100644 students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/Attribute.java create mode 100644 students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilder.java create mode 100644 students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilderTest.java create mode 100644 students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagNode.java diff --git a/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/Attribute.java b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/Attribute.java new file mode 100644 index 0000000000..6ee7739309 --- /dev/null +++ b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/Attribute.java @@ -0,0 +1,11 @@ +package com.coderising.dp.builder; + +public class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } \ No newline at end of file diff --git a/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilder.java b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilder.java new file mode 100644 index 0000000000..59c9dd8066 --- /dev/null +++ b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilder.java @@ -0,0 +1,46 @@ +package com.coderising.dp.builder; + +public class TagBuilder { + TagNode root; + TagNode parNode; + TagNode curNode; + + + public TagBuilder(String rootTagName) { + root = new TagNode(rootTagName); + curNode = root; + parNode = root; + } + + public TagBuilder addChild(String childTagName) { + TagNode node = new TagNode(childTagName); + curNode.add(node); + parNode = curNode; + curNode = node; + return this; + } + + public TagBuilder addSibling(String siblingTagName) { + TagNode node = new TagNode(siblingTagName); + parNode.add(node); + parNode = curNode; + curNode = node; + return this; + + } + + public TagBuilder setAttribute(String name, String value) { + curNode.setAttribute(name, value); + return this; + } + + public TagBuilder setText(String value) { + curNode.setValue(value); + return this; + } + + public String toXML() { + return root.toXML(); + } + +} diff --git a/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilderTest.java b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilderTest.java new file mode 100644 index 0000000000..e30d20285b --- /dev/null +++ b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagBuilderTest.java @@ -0,0 +1,40 @@ +package com.coderising.dp.builder; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TagBuilderTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + + TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + assertEquals(expected, xml); + } + +} diff --git a/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagNode.java b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagNode.java new file mode 100644 index 0000000000..0a28545af0 --- /dev/null +++ b/students/513274874/ood/ood-assignment/src/main/java/com/coderising/ood/builder/TagNode.java @@ -0,0 +1,78 @@ +package com.coderising.dp.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + return; + } + + attributes.add(new Attribute(name,value)); + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } + + public TagNode(TagBuilder builder){ + + + } +} From 892f1bc2c80ca44f782e10de82733050b1a542e7 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Fri, 21 Jul 2017 13:41:44 +0800 Subject: [PATCH 12/23] =?UTF-8?q?=E5=88=86=E5=88=AB=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E4=BA=86=E4=B8=A4=E5=B1=82=E5=B5=8C=E5=A5=97=E5=92=8C=E5=A4=9A?= =?UTF-8?q?=E5=B1=82=E5=B5=8C=E5=A5=97=E7=9A=84XML=E7=BB=93=E7=82=B9?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoubleLevelNesting/TagBuilder.java" | 71 ++++++++++++++ .../DoubleLevelNesting/TagNode.java" | 94 +++++++++++++++++++ .../MultiLevelNesting/TagBuilder.java" | 73 ++++++++++++++ .../MultiLevelNesting/TagNode.java" | 93 ++++++++++++++++++ ...4\232\345\261\202\345\265\214\345\245\227" | 0 5 files changed, 331 insertions(+) create mode 100644 "students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagBuilder.java" create mode 100644 "students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagNode.java" create mode 100644 "students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagBuilder.java" create mode 100644 "students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagNode.java" create mode 100644 "students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/\345\210\206\345\210\253\345\256\236\347\216\260\344\272\206\344\270\244\345\261\202\345\265\214\345\245\227\345\222\214\345\244\232\345\261\202\345\265\214\345\245\227" diff --git "a/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagBuilder.java" "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagBuilder.java" new file mode 100644 index 0000000000..be8b594844 --- /dev/null +++ "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagBuilder.java" @@ -0,0 +1,71 @@ +package DoubleLevelNesting; + +import java.util.ArrayList; + +/** + * Tag构造器 + * + * @author LanyuanXiaoyao + * @create 2017-07-18 + */ +public class TagBuilder { + + private TagNode root; + private TagBuilder rootBuilder; + + public TagBuilder(String rootName) { + this.root = new TagNode(rootName); + this.root.setChildren(new ArrayList<>()); + this.root.setAttributes(new ArrayList<>()); + } + + public TagBuilder(String rootName, TagBuilder tagBuilder) { + this.root = new TagNode(rootName); + this.root.setChildren(new ArrayList<>()); + this.root.setAttributes(new ArrayList<>()); + this.rootBuilder = tagBuilder; + } + + public TagBuilder addChild(String childName) { + TagBuilder childBuilder = new TagBuilder(childName, this); + if (rootBuilder == null) + root.getChildren().add(childBuilder.build()); + else + rootBuilder.build().getChildren().add(childBuilder.build()); + return childBuilder; + } + + public TagBuilder setAttribute(String name, String value) { + TagNode.Attribute attribute = new TagNode.Attribute(name, value); + root.getAttributes().add(attribute); + return this; + } + + public TagBuilder end() { + return rootBuilder; + } + + public void toXML() { + if (rootBuilder == null) + System.out.println(root.toXML()); + else + rootBuilder.toXML(); + } + + public TagNode build() { + return root; + } + + public static void main(String[] args) { + new TagBuilder("root") + .setAttribute("attr3", "value") + .setAttribute("attr4", "value") + .addChild("child") + .setAttribute("attr1", "value") + .setAttribute("attr2", "value") + .addChild("child2") + .setAttribute("attr5", "value") + .setAttribute("attr6", "value") + .toXML(); + } +} diff --git "a/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagNode.java" "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagNode.java" new file mode 100644 index 0000000000..45fc5ac9b6 --- /dev/null +++ "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/DoubleLevelNesting/TagNode.java" @@ -0,0 +1,94 @@ +package DoubleLevelNesting; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tag节点 + * + * @author LanyuanXiaoyao + * @create 2017-07-18 + */ +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String tagName) { + this.tagName = tagName; + } + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public String getTagValue() { + return tagValue; + } + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public List getAttributes() { + return attributes; + } + + public void setAttributes(List attributes) { + this.attributes = attributes; + } + + public static class Attribute { + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + + String name; + String value; + } + + public String toXML() { + return toXML(this); + } + + private String toXML(TagNode node) { + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if (node.attributes.size() > 0) { + for (int i = 0; i < node.attributes.size(); i++) { + Attribute attr = node.attributes.get(i); + buffer.append(" ").append(toXML(attr)); + } + } + if (node.children.size() == 0) { + buffer.append("/>"); + return buffer.toString(); + } + System.out.println(node.children.size()); + buffer.append(">"); + for (TagNode childNode : node.children) { + buffer.append(toXML(childNode)); + } + buffer.append(""); + + return buffer.toString(); + } + + private String toXML(Attribute attr) { + return attr.name + "=\"" + attr.value + "\""; + } +} diff --git "a/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagBuilder.java" "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagBuilder.java" new file mode 100644 index 0000000000..64b3a3d51a --- /dev/null +++ "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagBuilder.java" @@ -0,0 +1,73 @@ +package MultiLevelNesting; + +import java.util.ArrayList; + +/** + * Tag构造器 + * + * @author LanyuanXiaoyao + * @create 2017-07-18 + */ +public class TagBuilder { + + private TagNode root; + private TagBuilder rootBuilder; + + public TagBuilder(String rootName) { + this.root = new TagNode(rootName); + this.root.setChildren(new ArrayList<>()); + this.root.setAttributes(new ArrayList<>()); + } + + public TagBuilder(String rootName, TagBuilder tagBuilder) { + this.root = new TagNode(rootName); + this.root.setChildren(new ArrayList<>()); + this.root.setAttributes(new ArrayList<>()); + this.rootBuilder = tagBuilder; + } + + public TagBuilder addChild(String childName) { + TagBuilder childBuilder = new TagBuilder(childName, this); + root.getChildren().add(childBuilder.toTagTreeNode()); + return childBuilder; + } + + public TagBuilder setAttribute(String name, String value) { + TagNode.Attribute attribute = new TagNode.Attribute(name, value); + root.getAttributes().add(attribute); + return this; + } + + public TagBuilder and() { + return rootBuilder; + } + + public void toXML() { + if (rootBuilder == null) + System.out.println(root.toXML()); + else + rootBuilder.toXML(); + } + + public TagNode toTagTreeNode() { + return root; + } + + public static void main(String[] args) { + new TagBuilder("root") + .setAttribute("attr0","0") + .addChild("child") + .setAttribute("attr1","1") + .setAttribute("attr1","1") + .setAttribute("attr1","1") + .addChild("child2") + .setAttribute("attr2","2") + .setAttribute("attr2","2") + .setAttribute("attr2","2") + .and() + .and() + .addChild("child3") + .setAttribute("attr3","3") + .toXML(); + } +} diff --git "a/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagNode.java" "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagNode.java" new file mode 100644 index 0000000000..421ca50850 --- /dev/null +++ "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/MultiLevelNesting/TagNode.java" @@ -0,0 +1,93 @@ +package MultiLevelNesting; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tag节点 + * + * @author LanyuanXiaoyao + * @create 2017-07-18 + */ +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String tagName) { + this.tagName = tagName; + } + + public String getTagName() { + return tagName; + } + + public void setTagName(String tagName) { + this.tagName = tagName; + } + + public String getTagValue() { + return tagValue; + } + + public void setTagValue(String tagValue) { + this.tagValue = tagValue; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public List getAttributes() { + return attributes; + } + + public void setAttributes(List attributes) { + this.attributes = attributes; + } + + public static class Attribute { + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + + String name; + String value; + } + + public String toXML() { + return toXML(this); + } + + private String toXML(TagNode node) { + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if (node.attributes.size() > 0) { + for (int i = 0; i < node.attributes.size(); i++) { + Attribute attr = node.attributes.get(i); + buffer.append(" ").append(toXML(attr)); + } + } + if (node.children.size() == 0) { + buffer.append("/>"); + return buffer.toString(); + } + buffer.append(">"); + for (TagNode childNode : node.children) { + buffer.append(toXML(childNode)); + } + buffer.append(""); + + return buffer.toString(); + } + + private String toXML(Attribute attr) { + return attr.name + "=\"" + attr.value + "\""; + } +} diff --git "a/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/\345\210\206\345\210\253\345\256\236\347\216\260\344\272\206\344\270\244\345\261\202\345\265\214\345\245\227\345\222\214\345\244\232\345\261\202\345\265\214\345\245\227" "b/students/949603184/homework06-XML\347\273\223\347\202\271\347\224\237\346\210\220\345\231\250/\345\210\206\345\210\253\345\256\236\347\216\260\344\272\206\344\270\244\345\261\202\345\265\214\345\245\227\345\222\214\345\244\232\345\261\202\345\265\214\345\245\227" new file mode 100644 index 0000000000..e69de29bb2 From bc2ecb5b57152868c6462082614cf4d17a8e6879 Mon Sep 17 00:00:00 2001 From: Liu Zengzeng Date: Fri, 21 Jul 2017 20:57:14 +0800 Subject: [PATCH 13/23] tagBuilder and singleton --- .../com/coderings/dp/builder/TagBuilder.java | 49 +++++++++++ .../coderings/dp/builder/TagBuilderTest.java | 40 +++++++++ .../com/coderings/dp/builder/TagNode.java | 83 +++++++++++++++++++ .../coderings/dp/singleton/jdk_singleton.md | 38 +++++++++ 4 files changed, 210 insertions(+) create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilder.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilderTest.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagNode.java create mode 100644 students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/singleton/jdk_singleton.md diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilder.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilder.java new file mode 100644 index 0000000000..becc6a3d37 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilder.java @@ -0,0 +1,49 @@ +package com.coderings.dp.builder; + +public class TagBuilder { + + final TagNode rootNode; + + TagNode iteratorNode; + + TagNode prevIteratorNode; + + public TagBuilder(String rootTagName) { + rootNode = new TagNode(rootTagName); + iteratorNode = rootNode; + prevIteratorNode = rootNode; + } + + public TagBuilder addChild(String childTagName) { + TagNode tagNode = new TagNode(childTagName); + iteratorNode.add(tagNode); + + prevIteratorNode = iteratorNode; + iteratorNode = tagNode; + + return this; + } + + public TagBuilder addSibling(String siblingTagName) { + TagNode tagNode = new TagNode(siblingTagName); + prevIteratorNode.add(tagNode); + + iteratorNode = tagNode; + + return this; + } + + public TagBuilder setAttribute(String name, String value) { + iteratorNode.setAttribute(name, value); + return this; + } + + public TagBuilder setText(String value) { + iteratorNode.setValue(value); + return this; + } + + public String toXML() { + return rootNode.toXML(); + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilderTest.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilderTest.java new file mode 100644 index 0000000000..2d6dae918b --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagBuilderTest.java @@ -0,0 +1,40 @@ +package com.coderings.dp.builder; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class TagBuilderTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + + TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + assertEquals(expected, xml); + } + +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagNode.java b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagNode.java new file mode 100644 index 0000000000..28fb0f54b8 --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/builder/TagNode.java @@ -0,0 +1,83 @@ +package com.coderings.dp.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + return; + } + + attributes.add(new Attribute(name,value)); + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + private static class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } +} diff --git a/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/singleton/jdk_singleton.md b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/singleton/jdk_singleton.md new file mode 100644 index 0000000000..69df72e73d --- /dev/null +++ b/students/2816977791/ood/ood-assignment/src/main/java/com/coderings/dp/singleton/jdk_singleton.md @@ -0,0 +1,38 @@ +#Singleton in JDK + +## java.lang.Runtime + + private static Runtime currentRuntime = new Runtime(); + + public static Runtime getRuntime() { + return currentRuntime; + } + +## java.awt.Desktop + + private DesktopPeer peer; + + private Desktop() { + peer = Toolkit.getDefaultToolkit().createDesktopPeer(this); + } + + + public static synchronized Desktop getDesktop(){ + Desktop desktop = (Desktop)context.get(Desktop.class); + + if (desktop == null) { + desktop = new Desktop(); + context.put(Desktop.class, desktop); + } + + return desktop; + } + +## java.lang.System + + private static volatile SecurityManager security = null; + + public static SecurityManager getSecurityManager() { + return security; + } + \ No newline at end of file From b757eef66f5640477539c22d549ab77a8a43faa5 Mon Sep 17 00:00:00 2001 From: sheng <1158154002@qq.com> Date: Sun, 23 Jul 2017 07:01:30 +0800 Subject: [PATCH 14/23] builder --- .../com/coderising/dp/builder/TagBuilder.java | 43 ++++++++++ .../coderising/dp/builder/TagBuilderTest.java | 45 ++++++++++ .../com/coderising/dp/builder/TagNode.java | 83 +++++++++++++++++++ 3 files changed, 171 insertions(+) create mode 100644 students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java create mode 100644 students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilderTest.java create mode 100644 students/1158154002/src/main/java/com/coderising/dp/builder/TagNode.java diff --git a/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java new file mode 100644 index 0000000000..c4efe3eaf3 --- /dev/null +++ b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java @@ -0,0 +1,43 @@ +package com.coderising.dp.builder; + +import java.util.List; + +public class TagBuilder { + private TagNode root; + private TagNode now; + private TagNode prev; + public TagBuilder(String rootTagName) { + root=new TagNode(rootTagName); + now=root; + } + + public TagBuilder addChild(String childTagName) { + prev=now; + TagNode temp=new TagNode(childTagName); + now.add(temp); + now=temp; + return this; + } + + public TagBuilder addSibling(String siblingTagName) { + List children=prev.getChildren(); + now=new TagNode(siblingTagName); + children.add(now); + return this; + + } + + public TagBuilder setAttribute(String name, String value) { + now.setAttribute(name, value); + return this; + } + + public TagBuilder setText(String value) { + + return this; + } + + public String toXML() { + return root.toXML(); + } +} diff --git a/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilderTest.java b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilderTest.java new file mode 100644 index 0000000000..147e159b23 --- /dev/null +++ b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilderTest.java @@ -0,0 +1,45 @@ +package com.coderising.dp.builder; + +import static org.junit.Assert.assertEquals; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TagBuilderTest { + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + + TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + assertEquals(expected, xml); + +// com.oracle.nio.BufferSecrets +// +// com.sun.corba.se.spi.extension.ServantCachingPolicy +// +// java.net.ProxySelector + } + +} diff --git a/students/1158154002/src/main/java/com/coderising/dp/builder/TagNode.java b/students/1158154002/src/main/java/com/coderising/dp/builder/TagNode.java new file mode 100644 index 0000000000..33b421cf10 --- /dev/null +++ b/students/1158154002/src/main/java/com/coderising/dp/builder/TagNode.java @@ -0,0 +1,83 @@ +package com.coderising.dp.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + return; + } + + attributes.add(new Attribute(name,value)); + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + private static class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } +} From 94a5da425ca19ca1da351047214aeb4d4eeab748 Mon Sep 17 00:00:00 2001 From: onlyliuxin <14703250@qq.com> Date: Sun, 23 Jul 2017 18:26:46 +0800 Subject: [PATCH 15/23] add implementation code --- .../com/coderising/dp/builder/TagBuilder.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/builder/TagBuilder.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/builder/TagBuilder.java index fe8673ec30..daa431f139 100644 --- a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/builder/TagBuilder.java +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/builder/TagBuilder.java @@ -1,30 +1,37 @@ package com.coderising.dp.builder; public class TagBuilder { - + private TagNode rootNode; + private TagNode currentNode; + private TagNode parentNode; public TagBuilder(String rootTagName){ - + rootNode = new TagNode(rootTagName); + currentNode = rootNode; + parentNode = null; } public TagBuilder addChild(String childTagName){ - - return null; + parentNode = this.currentNode; + this.currentNode = new TagNode(childTagName); + parentNode.add(currentNode); + return this; } public TagBuilder addSibling(String siblingTagName){ - - return null; + this.currentNode = new TagNode(siblingTagName); + parentNode.add(this.currentNode); + return this; } public TagBuilder setAttribute(String name, String value){ - - return null; + this.currentNode.setAttribute(name, value); + return this; } public TagBuilder setText(String value){ - - return null; + this.currentNode.setValue(value); + return this; } public String toXML(){ - return null; + return this.rootNode.toXML(); } } From bfd3d880c161963c5a076ed022f7b0b7d64ec89e Mon Sep 17 00:00:00 2001 From: onlyliuxin <14703250@qq.com> Date: Sun, 23 Jul 2017 18:30:16 +0800 Subject: [PATCH 16/23] add composite pattern --- .../main/java/com/coderising/dp/composite/Line.java | 11 +++++++++++ .../java/com/coderising/dp/composite/Rectangle.java | 11 +++++++++++ .../main/java/com/coderising/dp/composite/Shape.java | 5 +++++ .../main/java/com/coderising/dp/composite/Square.java | 11 +++++++++++ .../main/java/com/coderising/dp/composite/Text.java | 11 +++++++++++ 5 files changed, 49 insertions(+) create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Line.java create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Rectangle.java create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Shape.java create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Square.java create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Text.java diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Line.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Line.java new file mode 100644 index 0000000000..b3c769e63a --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Line.java @@ -0,0 +1,11 @@ +package com.coderising.dp.composite; + +public class Line implements Shape { + + @Override + public void draw() { + + + } + +} diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Rectangle.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Rectangle.java new file mode 100644 index 0000000000..2960351a35 --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Rectangle.java @@ -0,0 +1,11 @@ +package com.coderising.dp.composite; + +public class Rectangle implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Shape.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Shape.java new file mode 100644 index 0000000000..4562f10b12 --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Shape.java @@ -0,0 +1,5 @@ +package com.coderising.dp.composite; + +public interface Shape { + public void draw(); +} diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Square.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Square.java new file mode 100644 index 0000000000..f106d65fd8 --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Square.java @@ -0,0 +1,11 @@ +package com.coderising.dp.composite; + +public class Square implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Text.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Text.java new file mode 100644 index 0000000000..3543a08be3 --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/composite/Text.java @@ -0,0 +1,11 @@ +package com.coderising.dp.composite; + +public class Text implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} From f69d4e32798848fb74ead73b99228b1eb96e7ae1 Mon Sep 17 00:00:00 2001 From: onlyliuxin <14703250@qq.com> Date: Sun, 23 Jul 2017 18:35:03 +0800 Subject: [PATCH 17/23] add bridge pattern --- .../com/coderising/dp/bridge/GraphicLibrary1.java | 11 +++++++++++ .../com/coderising/dp/bridge/GraphicLibrary2.java | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary1.java create mode 100644 liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary2.java diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary1.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary1.java new file mode 100644 index 0000000000..798cfbc7f9 --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary1.java @@ -0,0 +1,11 @@ +package com.coderising.dp.bridge; + +public class GraphicLibrary1 { + public void draw_a_line(int x1,int y1,int x2,int y2){ + + } + public void draw_a_circle(int x,int y, int r){ + + } + +} diff --git a/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary2.java b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary2.java new file mode 100644 index 0000000000..2e67a1220b --- /dev/null +++ b/liuxin/ood/ood-assignment/src/main/java/com/coderising/dp/bridge/GraphicLibrary2.java @@ -0,0 +1,11 @@ +package com.coderising.dp.bridge; + +public class GraphicLibrary2 { + public void drawLine(int x1,int x2,int y1,int y2){ + + } + public void drawCircle(int x,int y, int r){ + + } + +} From 8807be3223df8b35d7a62af925bd9ca386b9c8af Mon Sep 17 00:00:00 2001 From: sheng <1158154002@qq.com> Date: Sun, 23 Jul 2017 22:25:36 +0800 Subject: [PATCH 18/23] builder --- .../src/main/java/com/coderising/dp/builder/TagBuilder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java index c4efe3eaf3..baefede533 100644 --- a/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java +++ b/students/1158154002/src/main/java/com/coderising/dp/builder/TagBuilder.java @@ -13,9 +13,9 @@ public TagBuilder(String rootTagName) { public TagBuilder addChild(String childTagName) { prev=now; - TagNode temp=new TagNode(childTagName); - now.add(temp); - now=temp; + now=new TagNode(childTagName); + prev.add(now); + return this; } From c9169960b1cdf4481a8cc34db924297313349248 Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Sun, 23 Jul 2017 23:54:28 +0800 Subject: [PATCH 19/23] =?UTF-8?q?[CI]=20=E6=8A=8A=E8=80=81=E5=B8=88?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E7=A7=BB=E5=8A=A8=E5=88=B0=E6=88=91?= =?UTF-8?q?=E7=9A=84=E7=9B=AE=E5=BD=95=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/coderising/mydp/bridge/GraphicLibrary1.java | 11 +++++++++++ .../com/coderising/mydp/bridge/GraphicLibrary2.java | 11 +++++++++++ .../{myood => mydp}/builder/TagBuilder.java | 2 +- .../{myood => mydp}/builder/TagBuilderTest.java | 2 +- .../coderising/{myood => mydp}/builder/TagNode.java | 2 +- .../{myood => mydp}/builder/tagExample.xml | 0 .../java/com/coderising/mydp/composite/Line.java | 11 +++++++++++ .../com/coderising/mydp/composite/Rectangle.java | 11 +++++++++++ .../java/com/coderising/mydp/composite/Shape.java | 5 +++++ .../java/com/coderising/mydp/composite/Square.java | 11 +++++++++++ .../java/com/coderising/mydp/composite/Text.java | 11 +++++++++++ .../java/com/coderising/mydp/decorator/Email.java | 6 ++++++ .../coderising/mydp/decorator/EmailDecorator.java | 5 +++++ .../com/coderising/mydp/decorator/EmailImpl.java | 12 ++++++++++++ 14 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java rename students/812350401/src/main/java/com/coderising/{myood => mydp}/builder/TagBuilder.java (95%) rename students/812350401/src/main/java/com/coderising/{myood => mydp}/builder/TagBuilderTest.java (96%) rename students/812350401/src/main/java/com/coderising/{myood => mydp}/builder/TagNode.java (97%) rename students/812350401/src/main/java/com/coderising/{myood => mydp}/builder/tagExample.xml (100%) create mode 100644 students/812350401/src/main/java/com/coderising/mydp/composite/Line.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/composite/Rectangle.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/composite/Shape.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/composite/Square.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/composite/Text.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/EmailImpl.java diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java new file mode 100644 index 0000000000..74c8d723bf --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.bridge; + +public class GraphicLibrary1 { + public void draw_a_line(int x1,int y1,int x2,int y2){ + + } + public void draw_a_circle(int x,int y, int r){ + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java new file mode 100644 index 0000000000..11cab3f2a0 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.bridge; + +public class GraphicLibrary2 { + public void drawLine(int x1,int x2,int y1,int y2){ + + } + public void drawCircle(int x,int y, int r){ + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java b/students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilder.java similarity index 95% rename from students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java rename to students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilder.java index ebfe9fe12b..4f6901c459 100644 --- a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilder.java +++ b/students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilder.java @@ -1,4 +1,4 @@ -package com.coderising.myood.builder; +package com.coderising.mydp.builder; public class TagBuilder { private TagNode rootNode; diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java b/students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilderTest.java similarity index 96% rename from students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java rename to students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilderTest.java index cb80841992..d310d7eb1b 100644 --- a/students/812350401/src/main/java/com/coderising/myood/builder/TagBuilderTest.java +++ b/students/812350401/src/main/java/com/coderising/mydp/builder/TagBuilderTest.java @@ -1,4 +1,4 @@ -package com.coderising.myood.builder; +package com.coderising.mydp.builder; import static org.junit.Assert.*; diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java b/students/812350401/src/main/java/com/coderising/mydp/builder/TagNode.java similarity index 97% rename from students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java rename to students/812350401/src/main/java/com/coderising/mydp/builder/TagNode.java index a9bb180a30..06b0f1c9de 100644 --- a/students/812350401/src/main/java/com/coderising/myood/builder/TagNode.java +++ b/students/812350401/src/main/java/com/coderising/mydp/builder/TagNode.java @@ -1,4 +1,4 @@ -package com.coderising.myood.builder; +package com.coderising.mydp.builder; import java.util.ArrayList; import java.util.List; diff --git a/students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml b/students/812350401/src/main/java/com/coderising/mydp/builder/tagExample.xml similarity index 100% rename from students/812350401/src/main/java/com/coderising/myood/builder/tagExample.xml rename to students/812350401/src/main/java/com/coderising/mydp/builder/tagExample.xml diff --git a/students/812350401/src/main/java/com/coderising/mydp/composite/Line.java b/students/812350401/src/main/java/com/coderising/mydp/composite/Line.java new file mode 100644 index 0000000000..2be4e6406c --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/composite/Line.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.composite; + +public class Line implements Shape { + + @Override + public void draw() { + + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/composite/Rectangle.java b/students/812350401/src/main/java/com/coderising/mydp/composite/Rectangle.java new file mode 100644 index 0000000000..ae90deb805 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/composite/Rectangle.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.composite; + +public class Rectangle implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/composite/Shape.java b/students/812350401/src/main/java/com/coderising/mydp/composite/Shape.java new file mode 100644 index 0000000000..20e1e0b6d2 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/composite/Shape.java @@ -0,0 +1,5 @@ +package com.coderising.mydp.composite; + +public interface Shape { + public void draw(); +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/composite/Square.java b/students/812350401/src/main/java/com/coderising/mydp/composite/Square.java new file mode 100644 index 0000000000..68df86555f --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/composite/Square.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.composite; + +public class Square implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/composite/Text.java b/students/812350401/src/main/java/com/coderising/mydp/composite/Text.java new file mode 100644 index 0000000000..22927e7789 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/composite/Text.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.composite; + +public class Text implements Shape { + + @Override + public void draw() { + // TODO Auto-generated method stub + + } + +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java new file mode 100644 index 0000000000..46775bf4bf --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java @@ -0,0 +1,6 @@ +package com.coderising.mydp.decorator; + +public interface Email { + public String getContent(); +} + diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java new file mode 100644 index 0000000000..3da5682260 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java @@ -0,0 +1,5 @@ +package com.coderising.mydp.decorator; + +public abstract class EmailDecorator implements Email{ + +} \ No newline at end of file diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailImpl.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailImpl.java new file mode 100644 index 0000000000..0cedef84a2 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailImpl.java @@ -0,0 +1,12 @@ +package com.coderising.mydp.decorator; + +public class EmailImpl implements Email { + private String content; + + public EmailImpl(String content) { + this.content = content; + } + public String getContent() { + return content; + } +} From 8c2973b4fd548b8cbf6f3a5be492dad27379247b Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Mon, 24 Jul 2017 00:03:40 +0800 Subject: [PATCH 20/23] =?UTF-8?q?[feature]=20atm=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coderising/myood/atmSimulation/README.md | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 students/812350401/src/main/java/com/coderising/myood/atmSimulation/README.md diff --git a/students/812350401/src/main/java/com/coderising/myood/atmSimulation/README.md b/students/812350401/src/main/java/com/coderising/myood/atmSimulation/README.md new file mode 100644 index 0000000000..8df2519517 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/myood/atmSimulation/README.md @@ -0,0 +1,23 @@ +## 某位同学的atm实现 +https://github.com/onlyliuxin/coding2017/pull/512 + +## atm需求 +一个ATM是一台机器,包含读卡设备,显示屏,吐钞口,存钞口,键盘,打印机 + +当机器空闲时,会显示一个欢迎消息,此时键盘和存钞口都是不活动的,直到一张银行卡被插入,读卡器会尝试读取这张卡,如果不可读,会提示用户并且弹出卡片如果卡片可读,读卡设备会读取账号,然后要求用户输入密码, 用户的输入应该显示为星号,而不是真正输入的数字。 + +如果用户输入的密码正确,则显示主菜单; 如果不正确,再给用户两次输入机会,如果第三次依然失败,ATM就吞卡 +主菜单提示用户可以: +1. 存款 +如果选择了存款交易,ATM要求用户输入存款的金额,然后在存钞口放入钞票 +2. 取款 +如果选择了取款交易,ATM要求用户输入提取的金额,如果账户余额足够,并且ATM的现金足够,从吐钞口吐出相应的钞票。 +转账 +3. 如果选择了转账,ATM要求用户输入转入的账号,如果余额足够, 就会执行转账交易 +查看余额 +如果选择了查询余额,ATM则显示账号的的余额所有的交易都是ATM和银行服务器合作 +用户可以选定交易,提供相关信息,交易完成后,返回主菜单 + +所有的交易都是ATM和银行服务器合作完成的,银行保留了账户信息,必须在合适的时候向银行查询这些信息 + +这里其实是两个系统, 一个运行在ATM上,另外一个在银行端 From 86a02897da5ebd62090de6717d9d9399b91c9adb Mon Sep 17 00:00:00 2001 From: orajavac Date: Mon, 24 Jul 2017 15:44:29 +0800 Subject: [PATCH 21/23] 20170724_1544_homework --- .../coding2017/ood/dp/bridge/Bridage.java | 32 +++++++ .../ood/dp/bridge/GraphicLibrary1.java | 10 +++ .../ood/dp/bridge/GraphicLibrary2.java | 10 +++ .../ood/dp/bridge/GraphicLibraryInter1.java | 6 ++ .../ood/dp/bridge/GraphicLibraryInter2.java | 6 ++ .../coding2017/ood/dp/bridge/MyBridge.java | 14 ++++ .../coding2017/ood/dp/builder/TagBuilder.java | 38 +++++++++ .../ood/dp/builder/TagBuilderTest.java | 39 +++++++++ .../coding2017/ood/dp/builder/TagNode.java | 83 +++++++++++++++++++ .../coding2017/ood/dp/composite/Line.java | 9 ++ .../ood/dp/composite/Rectangle.java | 9 ++ .../coding2017/ood/dp/composite/Shape.java | 5 ++ .../coding2017/ood/dp/composite/Square.java | 9 ++ .../coding2017/ood/dp/composite/Text.java | 9 ++ .../coding2017/ood/dp/decorator/Email.java | 5 ++ .../ood/dp/decorator/EmailDecorator.java | 14 ++++ .../dp/decorator/EmailEncryptDecorator.java | 13 +++ .../ood/dp/decorator/EmailImpl.java | 12 +++ 18 files changed, 323 insertions(+) create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/Bridage.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary1.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary2.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter1.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter2.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/MyBridge.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilder.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilderTest.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagNode.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Line.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Rectangle.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Shape.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Square.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Text.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/Email.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailDecorator.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailEncryptDecorator.java create mode 100644 students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailImpl.java diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/Bridage.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/Bridage.java new file mode 100644 index 0000000000..0b5f606a67 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/Bridage.java @@ -0,0 +1,32 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public abstract class Bridage { + + private GraphicLibraryInter1 g1; + + public GraphicLibraryInter1 getG1() { + return g1; + } + + public void setG1(GraphicLibraryInter1 g1) { + this.g1 = g1; + } + + public GraphicLibraryInter2 getG2() { + return g2; + } + + public void setG2(GraphicLibraryInter2 g2) { + this.g2 = g2; + } + + private GraphicLibraryInter2 g2; + + public void drawAGraph(){ + + } + + public void drawGraph(){ + + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary1.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary1.java new file mode 100644 index 0000000000..327caf7645 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary1.java @@ -0,0 +1,10 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public class GraphicLibrary1 implements GraphicLibraryInter1{ + public void draw_a_line(int x1,int y1,int x2,int y2){ + System.out.println("draw_a_line"); + } + public void draw_a_circle(int x,int y, int r){ + System.out.println("draw_a_circle"); + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary2.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary2.java new file mode 100644 index 0000000000..903f7e8869 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibrary2.java @@ -0,0 +1,10 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public class GraphicLibrary2 implements GraphicLibraryInter2{ + public void drawLine(int x1,int x2,int y1,int y2){ + System.out.println("drawLine"); + } + public void drawCircle(int x,int y, int r){ + System.out.println("drawCircle"); + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter1.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter1.java new file mode 100644 index 0000000000..514ea4362d --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter1.java @@ -0,0 +1,6 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public interface GraphicLibraryInter1 { + public void draw_a_line(int x1,int y1,int x2,int y2); + public void draw_a_circle(int x,int y, int r); +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter2.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter2.java new file mode 100644 index 0000000000..55946c6419 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/GraphicLibraryInter2.java @@ -0,0 +1,6 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public interface GraphicLibraryInter2 { + public void drawLine(int x1,int x2,int y1,int y2); + public void drawCircle(int x,int y, int r); +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/MyBridge.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/MyBridge.java new file mode 100644 index 0000000000..30762d49f9 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/bridge/MyBridge.java @@ -0,0 +1,14 @@ +package com.github.orajavac.coding2017.ood.dp.bridge; + +public class MyBridge extends Bridage{ + + public void drawAGraph(){ + getG1().draw_a_circle(1,2,3); + getG1().draw_a_line(1, 2,3,4); + } + + public void drawGraph(){ + getG2().drawLine(1,2,3,4); + getG2().drawCircle(1, 2,3); + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilder.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilder.java new file mode 100644 index 0000000000..9fa50d3529 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilder.java @@ -0,0 +1,38 @@ +package com.github.orajavac.coding2017.ood.dp.builder; + +public class TagBuilder { + + private TagNode rootNode; + private TagNode currentNode; + private TagNode parentNode; + public TagBuilder(String rootTagName){ + rootNode = new TagNode(rootTagName); + currentNode = rootNode; + parentNode = null; + } + + public TagBuilder addChild(String childTagName){ + parentNode = this.currentNode; + this.currentNode = new TagNode(childTagName); + parentNode.add(currentNode); + return this; + } + public TagBuilder addSibling(String siblingTagName){ + + this.currentNode = new TagNode(siblingTagName); + parentNode.add(this.currentNode); + return this; + + } + public TagBuilder setAttribute(String name, String value){ + this.currentNode.setAttribute(name, value); + return this; + } + public TagBuilder setText(String value){ + this.currentNode.setValue(value); + return this; + } + public String toXML(){ + return this.rootNode.toXML(); + } +} \ No newline at end of file diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilderTest.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilderTest.java new file mode 100644 index 0000000000..4922057b53 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagBuilderTest.java @@ -0,0 +1,39 @@ +package com.github.orajavac.coding2017.ood.dp.builder; + +import static org.junit.Assert.*; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class TagBuilderTest { + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testToXML() { + +TagBuilder builder = new TagBuilder("order"); + + String xml = builder.addChild("line-items") + .addChild("line-item").setAttribute("pid", "P3677").setAttribute("qty", "3") + .addSibling("line-item").setAttribute("pid", "P9877").setAttribute("qty", "10") + .toXML(); + + String expected = "" + + "" + + "" + + "" + + "" + + ""; + + System.out.println(xml); + assertEquals(expected, xml); + } +} \ No newline at end of file diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagNode.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagNode.java new file mode 100644 index 0000000000..dd305c8c0f --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/builder/TagNode.java @@ -0,0 +1,83 @@ +package com.github.orajavac.coding2017.ood.dp.builder; + +import java.util.ArrayList; +import java.util.List; + +public class TagNode { + private String tagName; + private String tagValue; + private List children = new ArrayList<>(); + private List attributes = new ArrayList<>(); + + public TagNode(String name){ + this.tagName = name; + } + public void add(TagNode child){ + this.children.add(child); + } + public void setAttribute(String name, String value) { + Attribute attr = findAttribute(name); + if(attr != null){ + attr.value = value; + return; + } + + attributes.add(new Attribute(name,value)); + } + private Attribute findAttribute(String name){ + for(Attribute attr : attributes){ + if(attr.name.equals(name)){ + return attr; + } + } + return null; + } + public void setValue(String value) { + this.tagValue = value; + + } + public String getTagName() { + return tagName; + } + public List getChildren() { + return children; + } + + private static class Attribute{ + public Attribute(String name, String value) { + this.name = name; + this.value = value; + } + String name; + String value; + + } + public String toXML(){ + return toXML(this); + } + private String toXML(TagNode node){ + StringBuilder buffer = new StringBuilder(); + buffer.append("<").append(node.tagName); + if(node.attributes.size()> 0){ + for(int i=0;i"); + return buffer.toString(); + } + buffer.append(">"); + for(TagNode childNode : node.children){ + buffer.append(toXML(childNode)); + } + buffer.append(""); + + + return buffer.toString(); + } + private String toXML(Attribute attr){ + return attr.name+"=\""+attr.value + "\""; + } +} \ No newline at end of file diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Line.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Line.java new file mode 100644 index 0000000000..fd0187f8f7 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Line.java @@ -0,0 +1,9 @@ +package com.github.orajavac.coding2017.ood.dp.composite; + +public class Line implements Shape{ + @Override + public void draw() { + + + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Rectangle.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Rectangle.java new file mode 100644 index 0000000000..0c48433bd1 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Rectangle.java @@ -0,0 +1,9 @@ +package com.github.orajavac.coding2017.ood.dp.composite; + +public class Rectangle implements Shape{ + @Override + public void draw() { + // TODO Auto-generated method stub + + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Shape.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Shape.java new file mode 100644 index 0000000000..4760261807 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Shape.java @@ -0,0 +1,5 @@ +package com.github.orajavac.coding2017.ood.dp.composite; + +public interface Shape { + public void draw(); +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Square.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Square.java new file mode 100644 index 0000000000..4c722ef6b0 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Square.java @@ -0,0 +1,9 @@ +package com.github.orajavac.coding2017.ood.dp.composite; + +public class Square implements Shape{ + @Override + public void draw() { + // TODO Auto-generated method stub + + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Text.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Text.java new file mode 100644 index 0000000000..0f964c516e --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/composite/Text.java @@ -0,0 +1,9 @@ +package com.github.orajavac.coding2017.ood.dp.composite; + +public class Text implements Shape{ + @Override + public void draw() { + // TODO Auto-generated method stub + + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/Email.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/Email.java new file mode 100644 index 0000000000..b7ad769be7 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/Email.java @@ -0,0 +1,5 @@ +package com.github.orajavac.coding2017.ood.dp.decorator; + +public interface Email { + public String getContent(); +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailDecorator.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailDecorator.java new file mode 100644 index 0000000000..4a441ae7c4 --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailDecorator.java @@ -0,0 +1,14 @@ +package com.github.orajavac.coding2017.ood.dp.decorator; + +public class EmailDecorator implements Email{ + + private Email email; + + public EmailDecorator(Email e){ + this.email = e; + } + + public String getContent(){ + return email.getContent()+",本邮件仅为个人观点,并不代表公司立场"; + } +} diff --git a/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailEncryptDecorator.java b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailEncryptDecorator.java new file mode 100644 index 0000000000..56c653fcfe --- /dev/null +++ b/students/562768642/src/com/github/orajavac/coding2017/ood/dp/decorator/EmailEncryptDecorator.java @@ -0,0 +1,13 @@ +package com.github.orajavac.coding2017.ood.dp.decorator; + +public class EmailEncryptDecorator implements Email{ + private Email email; + + public EmailEncryptDecorator(Email e){ + this.email = e; + } + + public String getContent(){ + return "$a^@ Date: Tue, 25 Jul 2017 01:04:38 +0800 Subject: [PATCH 22/23] =?UTF-8?q?[feature]=20bridge=EF=BC=88=E6=A1=A5?= =?UTF-8?q?=E6=8E=A5=EF=BC=89=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 构造了画图接口Drawing及其实现类 2. 构造了图形接口Shape及其实现类 3. 将图形与画图桥接起来,完成用不同的画图库来绘制不同的图形 --- .../com/coderising/mydp/bridge/Circle.java | 34 +++++++++++++++++ .../coderising/mydp/bridge/DrawClient.java | 26 +++++++++++++ .../com/coderising/mydp/bridge/DrawGL1.java | 24 ++++++++++++ .../com/coderising/mydp/bridge/DrawGL2.java | 23 ++++++++++++ .../com/coderising/mydp/bridge/Drawing.java | 9 +++++ .../mydp/bridge/GraphicLibrary1.java | 17 +++++++-- .../mydp/bridge/GraphicLibrary2.java | 12 +++++- .../com/coderising/mydp/bridge/Rectangle.java | 37 +++++++++++++++++++ .../com/coderising/mydp/bridge/Shape.java | 11 ++++++ 9 files changed, 188 insertions(+), 5 deletions(-) create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/Circle.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/DrawClient.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL1.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL2.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/Drawing.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/Rectangle.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/bridge/Shape.java diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/Circle.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/Circle.java new file mode 100644 index 0000000000..267a5ec13e --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/Circle.java @@ -0,0 +1,34 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class Circle implements Shape { + private int x, y, r; + private Drawing drawing; + + @Override + public void draw() { + drawing.drawCircle(x, y, r); + } + + public Circle(int x, int y, int r) { + this.x = x; + this.y = y; + this.r = r; + this.drawing = drawing; + } + + @Override + public void setDrawing(Drawing drawing) { + this.drawing = drawing; + } + + public static void main(String[] args) { + Shape c = new Circle(3,4,0); + c.setDrawing(new DrawGL1()); + c.draw(); + c.setDrawing(new DrawGL2()); + c.draw(); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawClient.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawClient.java new file mode 100644 index 0000000000..5c8c2cf2c8 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawClient.java @@ -0,0 +1,26 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class DrawClient { + public static void main(String[] args) { + Shape r = new Rectangle(1,2,3,4); + Shape c = new Circle(2,3,4); + Drawing d1 = new DrawGL1(); + Drawing d2 = new DrawGL2(); + + r.setDrawing(d1); + r.draw(); + System.out.println(); + r.setDrawing(d2); + r.draw(); + System.out.println(); + + c.setDrawing(d1); + c.draw(); + System.out.println(); + c.setDrawing(d2); + c.draw(); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL1.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL1.java new file mode 100644 index 0000000000..a1218aaae5 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL1.java @@ -0,0 +1,24 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class DrawGL1 implements Drawing { + private GraphicLibrary1 gl1 = new GraphicLibrary1(); + + @Override + public void drawLine(int x1, int y1, int x2, int y2) { + gl1.draw_a_line(x1, y1, x2, y2); + } + + @Override + public void drawCircle(int x, int y, int r) { + gl1.draw_a_circle(x, y, r); + } + + public static void main(String[] args) { + DrawGL1 d1 = new DrawGL1(); + d1.drawCircle(4,5,1); + d1.drawLine(1,2,3,4); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL2.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL2.java new file mode 100644 index 0000000000..03faf2a82a --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/DrawGL2.java @@ -0,0 +1,23 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +class DrawGL2 implements Drawing { + private GraphicLibrary2 gl2 = new GraphicLibrary2(); + @Override + public void drawLine(int x1, int y1, int x2, int y2) { + gl2.drawLine(x1, y1, x2, y2); + } + + @Override + public void drawCircle(int x, int y, int r) { + gl2.drawCircle(x, y, r); + } + + public static void main(String[] args) { + DrawGL2 d2 = new DrawGL2(); + d2.drawCircle(4,5,1); + d2.drawLine(1,2,3,4); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/Drawing.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/Drawing.java new file mode 100644 index 0000000000..2c641784bc --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/Drawing.java @@ -0,0 +1,9 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public interface Drawing { + void drawLine(int x1, int y1, int x2, int y2); + void drawCircle(int x, int y, int r); +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java index 74c8d723bf..7b5bafa6d3 100644 --- a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary1.java @@ -2,10 +2,21 @@ public class GraphicLibrary1 { public void draw_a_line(int x1,int y1,int x2,int y2){ - + System.out.println("Library1_line: " + get_a_line(x1, y1, x2, y2)); } - public void draw_a_circle(int x,int y, int r){ - + + private String get_a_line(int x1,int y1,int x2,int y2) { + return "(" + x1 + ", " + y1 + ")-----"+"(" + x2 + ", " + y2 + ")"; + } + + public void draw_a_circle(int x,int y, int r) { + System.out.println("Library1_circle: " + "(" + x + ", " + y +"), r=" + r); } + public static void main(String[] args) { + GraphicLibrary1 library1 = new GraphicLibrary1(); + library1.draw_a_line(1,3,4,5); + library1.draw_a_circle(0,2,4); + } + } diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java index 11cab3f2a0..cac917ffc4 100644 --- a/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/GraphicLibrary2.java @@ -2,10 +2,18 @@ public class GraphicLibrary2 { public void drawLine(int x1,int x2,int y1,int y2){ - + System.out.println("Library2_line: " + getLine(x1, y1, x2, y2)); } public void drawCircle(int x,int y, int r){ - + System.out.println("Library2_circle: " + "(" + x + ", " + y +"), r=" + r); + } + private String getLine(int x1,int y1,int x2,int y2) { + return "(" + x1 + ", " + y1 + ")-----"+"(" + x2 + ", " + y2 + ")"; } + public static void main(String[] args) { + GraphicLibrary2 library2 = new GraphicLibrary2(); + library2.drawLine(1,3,4,5); + library2.drawCircle(0,2,4); + } } diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/Rectangle.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/Rectangle.java new file mode 100644 index 0000000000..9ca3bb9591 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/Rectangle.java @@ -0,0 +1,37 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class Rectangle implements Shape { + private Drawing drawing; + private int x1, y1, x2, y2; + + @Override + public void setDrawing(Drawing drawing) { + this.drawing = drawing; + } + + @Override + public void draw() { + drawing.drawLine(x1, y1, x1, y2); + drawing.drawLine(x1, y1, x2, y1); + drawing.drawLine(x1, y2, x2, y2); + drawing.drawLine(x2, y1, x2, y2); + } + + public Rectangle(int x1, int y1, int x2, int y2) { + this.x1 = x1; + this.y1 = y1; + this.x2 = x2; + this.y2 = x2; + } + + public static void main(String[] args) { + Shape r = new Rectangle(1,2,3,4); + r.setDrawing(new DrawGL1()); + r.draw(); + r.setDrawing(new DrawGL2()); + r.draw(); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/bridge/Shape.java b/students/812350401/src/main/java/com/coderising/mydp/bridge/Shape.java new file mode 100644 index 0000000000..4a89d2cbe1 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/bridge/Shape.java @@ -0,0 +1,11 @@ +package com.coderising.mydp.bridge; + +/** + * Created by thomas_young on 25/7/2017. + */ +public interface Shape { + + void setDrawing(Drawing drawing); + + void draw(); +} From 5e10c457f848621a5b112e12a073658b2e634aec Mon Sep 17 00:00:00 2001 From: Thomas Young Date: Tue, 25 Jul 2017 08:05:27 +0800 Subject: [PATCH 23/23] =?UTF-8?q?[feature]=20=E8=A3=85=E9=A5=B0=E8=80=85?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 实现了外发邮件装饰者 2. 实现了机密邮件装饰者 3. 编写了测试用例 --- students/812350401/pom.xml | 5 ++ .../com/coderising/mydp/decorator/Email.java | 2 +- .../mydp/decorator/EmailDecorator.java | 1 + .../mydp/decorator/EmailEncrypt.java | 24 ++++++++ .../mydp/decorator/EmailSendOut.java | 19 ++++++ .../coderising/mydp/decorator/EmailTest.java | 42 ++++++++++++++ .../com/coderising/mydp/utils/Encryptor.java | 58 +++++++++++++++++++ 7 files changed, 150 insertions(+), 1 deletion(-) create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/EmailEncrypt.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/EmailSendOut.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/decorator/EmailTest.java create mode 100644 students/812350401/src/main/java/com/coderising/mydp/utils/Encryptor.java diff --git a/students/812350401/pom.xml b/students/812350401/pom.xml index 8f2f890209..13499886be 100644 --- a/students/812350401/pom.xml +++ b/students/812350401/pom.xml @@ -39,6 +39,11 @@ google-collections 1.0 + + commons-codec + commons-codec + 1.6 + diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java index 46775bf4bf..d4b4bc12ab 100644 --- a/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/Email.java @@ -1,6 +1,6 @@ package com.coderising.mydp.decorator; public interface Email { - public String getContent(); + String getContent(); } diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java index 3da5682260..045b344b42 100644 --- a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailDecorator.java @@ -1,5 +1,6 @@ package com.coderising.mydp.decorator; public abstract class EmailDecorator implements Email{ + } \ No newline at end of file diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailEncrypt.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailEncrypt.java new file mode 100644 index 0000000000..b31c09139d --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailEncrypt.java @@ -0,0 +1,24 @@ +package com.coderising.mydp.decorator; + +import com.coderising.mydp.utils.Encryptor; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class EmailEncrypt extends EmailDecorator { + private Email email; + private String key; + private String initVector; + + public EmailEncrypt(String key, String initVector, Email email) { + this.key = key; + this.initVector = initVector; + this.email = email; + } + + @Override + public String getContent() { + String content = email.getContent(); + return Encryptor.encrypt(key, initVector, content); + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailSendOut.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailSendOut.java new file mode 100644 index 0000000000..a553e7120a --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailSendOut.java @@ -0,0 +1,19 @@ +package com.coderising.mydp.decorator; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class EmailSendOut extends EmailDecorator { + Email email; + + public EmailSendOut(Email email) { + this.email = email; + } + + @Override + public String getContent() { + String content = email.getContent(); + content += "\n" + "本邮件仅为个人观点,并不代表公司立场."; + return content; + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailTest.java b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailTest.java new file mode 100644 index 0000000000..48df0f5dd5 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/decorator/EmailTest.java @@ -0,0 +1,42 @@ +package com.coderising.mydp.decorator; + +import com.coderising.mydp.utils.Encryptor; +import org.junit.Test; + +/** + * Created by thomas_young on 25/7/2017. + */ +public class EmailTest { + private Email email = new EmailImpl("Hello World!"); + private String key = "Bar12345Bar12345"; // 128 bit key + private String initVector = "RandomInitVector"; // 16 bytes IV + + @Test + public void testSendToOut() { + Email emailSendOut = new EmailSendOut(email); + System.out.println(emailSendOut.getContent()); + } + + @Test + public void testEncrypt() { + Email emailEncrypt = new EmailEncrypt(key, initVector, email); + String encryptedContent = emailEncrypt.getContent(); + System.out.println("encrypted content: " + encryptedContent); + System.out.println(Encryptor.decrypt(key, initVector, encryptedContent)); + } + + @Test + public void testEncryptSendOut() { + Email emailsendOutEncrypt = new EmailSendOut(new EmailEncrypt(key, initVector, email)); + System.out.println(emailsendOutEncrypt.getContent()); + System.out.println(); + + Email emailEncryptSendOut = new EmailEncrypt(key, initVector, new EmailSendOut(email)); + String encryptedContent = emailEncryptSendOut.getContent(); + System.out.println("encrypted content: " + encryptedContent); + + System.out.println(); + System.out.println(Encryptor.decrypt(key, initVector, encryptedContent)); + + } +} diff --git a/students/812350401/src/main/java/com/coderising/mydp/utils/Encryptor.java b/students/812350401/src/main/java/com/coderising/mydp/utils/Encryptor.java new file mode 100644 index 0000000000..af177ed678 --- /dev/null +++ b/students/812350401/src/main/java/com/coderising/mydp/utils/Encryptor.java @@ -0,0 +1,58 @@ +package com.coderising.mydp.utils; + +/** + * Created by thomas_young on 25/7/2017. + */ +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; + +public class Encryptor { + public static String encrypt(String key, String initVector, String value) { + try { + IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); + SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + + byte[] encrypted = cipher.doFinal(value.getBytes()); + // System.out.println("encrypted string: " + // + Base64.encodeBase64String(encrypted)); + + return Base64.encodeBase64String(encrypted); + } catch (Exception ex) { + ex.printStackTrace(); + } + + return null; + } + + public static String decrypt(String key, String initVector, String encrypted) { + try { + IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8")); + SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); + + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING"); + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + + byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted)); + + return new String(original); + } catch (Exception ex) { + ex.printStackTrace(); + } + + return null; + } + + public static void main(String[] args) { + String key = "Bar12345Bar12345"; // 128 bit key + String initVector = "RandomInitVector"; // 16 bytes IV + + System.out.println(decrypt(key, initVector, + encrypt(key, initVector, "Hello World"))); + } +}