-
简单工厂模式:实现了生成产品类的代码和客户端代码分离,在工厂类中添加所需要的逻辑代码
interface Product{} ProductA implements Product{} ProductB implements Product{} SimpleFactory{ static Product create(String str){ if(str.equals("productA")){ return new ProductA(); } else if(str.equals("productB")){ return new ProductB(); } return null; } } //客户端 Client{ SimpleFactory.create("productA"); }
-
工厂方法模式:通过对应的工厂类生成对应的产品类,可以实现开闭原则,这样无论加多少个产品类,都不需要修改原来类中的代码,而是增加工厂类来实现。
interface Product{} ProductA implements Product{} ProductB implements Product{} interface Factory{ Product createProduct(); } FactoryA implements Factory{ Product createProduct(){ return new ProductA(); } } FactoryB implements Factory{ Product createProduct(){ return new ProductB(); } } //增加新的产品 ProductC implements Product{} FactoryC implements Factory{ Product createProduct(){ return new ProductC(); } } //客户端 Client{ Factory a=new FactoryA(); a.createProduct(); }
-
抽象工厂模式:应对产品族概念,增加新的产品线,而不增加新的产品。
interface Product{} interface Gift{}//增加新的产品线 interface Factory{ Product createProduct(); Gift createGift();//增加新的产品 } ProductA implements Product{} ProductB implements Product{} GiftA implements Gift{} GiftB implements Gift{} FactoryA implements Factory{ Product createProduct(){ return new ProductA(); } Gift createGift(){ return new GiftA(); } } FactoryB implements Factory{ Product createProduct(){ return new ProductB(); } Gift createGift(){ return new GiftB(); } }
其中的区别:
- 简单工厂:用来生产同等级结构中的固定产品(对新增加的产品无能为力)
- 工厂方法:用来生产同等级结构中的任意产品(支持增加任意产品)
- 抽象工厂:用来生产不同产品族的全部产品(增加新的产品无能为力,但是增加新的产品线)