工厂模式根据业务场景的不同, 有三种不同的实现方式,分别是简单工厂模式、工厂模式、抽象工厂模式。
简单工厂模式
class simpleFactory{
int prodNo;
public simpleFactory(int proN){
this.prodNo= prodNo;
}
public IProduction GetProduction(){
switch(prodNo){
case 1:
return new ProductionA();
case 2:
return new ProductionB();
default:
return new ProductionC();
}
}
}
interface IProduction{}
class ProductionA implements IProduction{}
class ProductionB implements IProduction{}
class ProductionC implements IProduction{}
简单工厂通过构造时传入的标识来生产产品,不同产品都在同一个工厂中生产,这种判断会随着产品的增加而增加,给扩展和维护带来麻烦。
工厂模式
Interface IFactory(){
IProduction getProduction();
}
class FactoryA implements IFactory{
IProduction productionA;
public FactoryA(){
this.productionA = new ProductionA();
}
public IProduction getProduction(){
return this.productionA;
}
}
class FactoryB implements IFactory{
IProduction productionB;
public FactoryB{
this.productionB = new ProductionB();
}
public IProduction getProduction(){
return this.productionB;
}
}
interface IProduction{}
class ProductionA implements IProduction(){}
class ProductionB implements IProduction(){}
工厂模式中,一个工厂生产一个产品,所有产品派生于同一个抽象产品(或产品接口),但工厂模式无法解决产品族和产品等级结构的问题
抽象工厂模式
interface IFactory{
IFridge CreateFridge();
IAirCondition CreateAirCondition();
}
class SamsungFactory implements IFactory{
public IAirCondition CreateAirCondition(){
return new SamsungAirCondition();
}
public IFridge CreateFridge(){
return new SamsungFridge();
}
}
class GreeFactry implements IFactory{
public IAirCondition CreateAirCondition(){
return new GreeAirCondition();
}
public IFridge CreateFridge(){
return new GreeFridge();
}
}
public interface IFridge{}
public interface IAirCondition{}
public class SamsungFridge implments IFridge{}
public class GreeFridge implements IFridge{}
public class SamsungAirCondition implements IAirConditio{}
public class GreeAirCondition implements IAirConditi{}
抽象工厂模式中,一个工厂生产多个产品,它们是一个产品族,不同的产品族的产品派生于不同的抽象产品。