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); +}