Write a piece of code that demonstrates your understanding of object-oriented principles.
Implement a Python class hierarchy for circles, rectangles, and triangles, with polymorphic area and perimeter calculations. Define summarize_shapes(shapes), which accepts a list of shape dictionaries and returns rounded area and perimeter results in the same order. Use abstraction, inheritance, encapsulation, and a factory or equivalent construction approach.
def summarize_shapes(shapes):