a new oop design, only halfly finished the group part without test