设计模式-工厂模式简单理解
Posted onetwothree
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-工厂模式简单理解相关的知识,希望对你有一定的参考价值。
产品接口:Product 产品实现类:ProductA,ProductB
当你需要根据条件A和B来分别创建产品时,就可以把if else放到一个类SimpleFacotory中的createProduct方法中,如下
SimpleFactory{ public Product create(Type){ if(A) return new ProductA(); if(B) return new ProductB(); } } Client: Product A= new SimpleFactory().create(A); //当用户需要创建A类型的产品时,调用工厂的create方法
这就叫简单工厂:一个工厂对象,一个create方法实现所有Product的创建。
这时候需求变了,用户要求创建A B C D E F Porduct,可能还要增加....X Y Z Product,原来的类经过测试了不要再修改。不让SimpleFactory修改?不干了,你们自己创建自己的产品,SimpleFactory罢工了!
那只能自己创建自己的产品了,
class FactoryA implement Factory{ public Product create(){ return new ProductA(); } } class FactoryB implement Factory{ public Product create(){ return new ProductB(); } } class FactoryC implement Factory ... Client: Factory f = new FactoryA(); //当用户需要创建A类型的产品时,先创建A工厂 f.create();
这时候需求又变了 ,生产Product的同时还要生产它的附加产品Additional,而且Additional的实现类还会和Product一起不断扩展,怎么办?每个Additional再创建一个工厂吗?这样类会不会太多了。
分类吧,我们知道ProductA和AdditionalA可以放在一起,ProductB和AdditionalB可以放在一起.....,于是:
class FactoryA implement Factory{ public Product createProduct(){ return new ProductA(); } public Product createAdditional(){ return new AdditionalA(); } } class FactoryB implement Factory{ public Product createProduct(){ return new ProductB(); } public Product createAdditional(){ return new AdditionalB(); } } ... Client: Factory f = new FactoryA(); //当用户需要创建A系列的产品时,先创建A工厂 f.createProduct(); f.createAdditional();
这样,当增加新的Product和Additionall系列时,我们创建一个工厂就行了,起码比工厂方法模式减少了一倍。
以上是关于设计模式-工厂模式简单理解的主要内容,如果未能解决你的问题,请参考以下文章
深入理解设计模式-策略模式(结合简单工厂反射Spring详细讲解)