Visitor pattern och abstract factory