ClientAbstractFactorycreateProductA()createProductB()ConcreteFactorycreateProductA()createProductB()AbstractProductConcreteProduct