定义:定义一个创建对象的接口,让子类去实现那个接口,而对象的创建统一交由工厂去创建
一、简单工厂:又称静态工厂,主要有一个静态方法,跟据这个方法的参数,返回实现了同一个接口的不同的对象
要生产的对象实现的统一接口
public interface GoodsImpl {
void onCreateGoods();
}
要生产的对象A
public class AppleGood implements GoodsImpl{
@Override
public void onCreateGoods() {
Log.e("TAG","生产一个苹果");
}
}
要生产的对象A
public class BananaGoods implements GoodsImpl{
@Override
public void onCreateGoods() {
Log.e("TAG","生产一个香蕉");
}
}
生产对象的工厂
public class GoodsFactory {
public static GoodsImpl createGoods(String goods){
if(goods.equals("香蕉")){
return new BananaGoods();
}else if(goods.equals("苹果")){
return new AppleGood();
}
return null;
}
}
用法
private void initData() {
AppleGood goods= (AppleGood) GoodsFactory.createGoods("苹果");
goods.onCreateGoods();
}
二、工厂方法:生产不同的产品对应不同的工厂;定义工厂的统一接口,所有工厂都实现这个接口。这样没生产一种产品都会有一个工厂,如果生产的产品比较多,那么工厂类就会不断增加
工厂的统一接口
public interface FactoryImp {
GoodsImpl onCreate();
}
生产产品A的工厂
public class BananaFactory implements FactoryImp{
@Override
public GoodsImpl onCreate() {
return null;
}
}
生产B的工厂
public class AppleFactory implements FactoryImp{
@Override
public GoodsImpl onCreate() {
return null;
}
}
三、抽象工厂:个人感觉时工厂方法的扩展,扩展出多个工厂,每个工厂不只是只能生产一种产品
工厂的统一接口
public interface FactoryImp {
GoodsImpl onCreateApple();
GoodsImpl onCreateBanana();
}
工厂A
public class FactoryA implements FactoryImp{
@Override
public GoodsImpl onCreateApple() {
return null;
}
@Override
public GoodsImpl onCreateBanana() {
return null;
}
}
工厂B
public class FactoryB implements FactoryImp{
@Override
public GoodsImpl onCreateApple() {
return null;
}
@Override
public GoodsImpl onCreateBanana() {
return null;
}
}
网友评论