visitor pattern

master
terry 3 years ago
parent c29641bcb4
commit 76d7dcd0df

@ -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;
}
}

@ -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;
}
}

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

@ -0,0 +1,6 @@
package visitor;
public interface ComputerPart {
void accept(Visitor v);
double getPrice();
}

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

@ -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;
}
}

@ -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;
}
}

@ -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;
}
}

@ -0,0 +1,7 @@
package visitor;
public interface Visitor {
void visitCPU(CPU cpu);
void visitMemory(Memory memory);
void visitMainBoard(MainBoard mainBoard);
}
Loading…
Cancel
Save