From 76d7dcd0dfabc917b0b703ea54a62e696e11fe79 Mon Sep 17 00:00:00 2001 From: terry <724796052@qq.com> Date: Sun, 3 Jul 2022 09:56:04 +0800 Subject: [PATCH] visitor pattern --- src/main/java/visitor/CPU.java | 13 +++++++++++++ src/main/java/visitor/CompanyVisitor.java | 20 ++++++++++++++++++++ src/main/java/visitor/Computer.java | 13 +++++++++++++ src/main/java/visitor/ComputerPart.java | 6 ++++++ src/main/java/visitor/Main.java | 14 ++++++++++++++ src/main/java/visitor/MainBoard.java | 13 +++++++++++++ src/main/java/visitor/Memory.java | 13 +++++++++++++ src/main/java/visitor/StudentVisitor.java | 19 +++++++++++++++++++ src/main/java/visitor/Visitor.java | 7 +++++++ 9 files changed, 118 insertions(+) create mode 100644 src/main/java/visitor/CPU.java create mode 100644 src/main/java/visitor/CompanyVisitor.java create mode 100644 src/main/java/visitor/Computer.java create mode 100644 src/main/java/visitor/ComputerPart.java create mode 100644 src/main/java/visitor/Main.java create mode 100644 src/main/java/visitor/MainBoard.java create mode 100644 src/main/java/visitor/Memory.java create mode 100644 src/main/java/visitor/StudentVisitor.java create mode 100644 src/main/java/visitor/Visitor.java diff --git a/src/main/java/visitor/CPU.java b/src/main/java/visitor/CPU.java new file mode 100644 index 0000000..ef9d44d --- /dev/null +++ b/src/main/java/visitor/CPU.java @@ -0,0 +1,13 @@ +package visitor; + +public class CPU implements ComputerPart{ + @Override + public void accept(Visitor v) { + v.visitCPU(this); + } + + @Override + public double getPrice() { + return 1880; + } +} diff --git a/src/main/java/visitor/CompanyVisitor.java b/src/main/java/visitor/CompanyVisitor.java new file mode 100644 index 0000000..ec72fc9 --- /dev/null +++ b/src/main/java/visitor/CompanyVisitor.java @@ -0,0 +1,20 @@ +package visitor; + +public class CompanyVisitor implements Visitor{ + double totalPrice = 0; + @Override + public void visitCPU(CPU cpu) { + totalPrice += cpu.getPrice() * 0.7; + } + + @Override + public void visitMemory(Memory memory) { + totalPrice += memory.getPrice() * 0.7; + + } + + @Override + public void visitMainBoard(MainBoard mainBoard) { + totalPrice += mainBoard.getPrice() * 0.7; + } +} diff --git a/src/main/java/visitor/Computer.java b/src/main/java/visitor/Computer.java new file mode 100644 index 0000000..0443620 --- /dev/null +++ b/src/main/java/visitor/Computer.java @@ -0,0 +1,13 @@ +package visitor; + +public class Computer { + private ComputerPart cpu = new CPU(); + private ComputerPart memory = new Memory(); + private ComputerPart mainBoard = new MainBoard(); + + public void accept(Visitor v){ + this.cpu.accept(v); + this.memory.accept(v); + this.mainBoard.accept(v); + } +} diff --git a/src/main/java/visitor/ComputerPart.java b/src/main/java/visitor/ComputerPart.java new file mode 100644 index 0000000..8209580 --- /dev/null +++ b/src/main/java/visitor/ComputerPart.java @@ -0,0 +1,6 @@ +package visitor; + +public interface ComputerPart { + void accept(Visitor v); + double getPrice(); +} diff --git a/src/main/java/visitor/Main.java b/src/main/java/visitor/Main.java new file mode 100644 index 0000000..a669013 --- /dev/null +++ b/src/main/java/visitor/Main.java @@ -0,0 +1,14 @@ +package visitor; + +public class Main { + public static void main(String[] args) { + Computer computer = new Computer(); + StudentVisitor visitor = new StudentVisitor(); + computer.accept(visitor); + System.out.println(visitor.totalPrice); + + CompanyVisitor visitor2 = new CompanyVisitor(); + computer.accept(visitor2); + System.out.println(visitor2.totalPrice); + } +} diff --git a/src/main/java/visitor/MainBoard.java b/src/main/java/visitor/MainBoard.java new file mode 100644 index 0000000..7987fa4 --- /dev/null +++ b/src/main/java/visitor/MainBoard.java @@ -0,0 +1,13 @@ +package visitor; + +public class MainBoard implements ComputerPart{ + @Override + public void accept(Visitor v) { + v.visitMainBoard(this); + } + + @Override + public double getPrice() { + return 1200.5; + } +} diff --git a/src/main/java/visitor/Memory.java b/src/main/java/visitor/Memory.java new file mode 100644 index 0000000..473218a --- /dev/null +++ b/src/main/java/visitor/Memory.java @@ -0,0 +1,13 @@ +package visitor; + +public class Memory implements ComputerPart{ + @Override + public void accept(Visitor v) { + v.visitMemory(this); + } + + @Override + public double getPrice() { + return 800; + } +} diff --git a/src/main/java/visitor/StudentVisitor.java b/src/main/java/visitor/StudentVisitor.java new file mode 100644 index 0000000..01da064 --- /dev/null +++ b/src/main/java/visitor/StudentVisitor.java @@ -0,0 +1,19 @@ +package visitor; + +public class StudentVisitor implements Visitor{ + double totalPrice = 0; + @Override + public void visitCPU(CPU cpu) { + totalPrice += cpu.getPrice() * 0.9; + } + + @Override + public void visitMemory(Memory memory) { + totalPrice += memory.getPrice() * 0.8; + } + + @Override + public void visitMainBoard(MainBoard mainBoard) { + totalPrice += mainBoard.getPrice() * 0.95; + } +} diff --git a/src/main/java/visitor/Visitor.java b/src/main/java/visitor/Visitor.java new file mode 100644 index 0000000..149f926 --- /dev/null +++ b/src/main/java/visitor/Visitor.java @@ -0,0 +1,7 @@ +package visitor; + +public interface Visitor { + void visitCPU(CPU cpu); + void visitMemory(Memory memory); + void visitMainBoard(MainBoard mainBoard); +}