design-pattern-using-as