介绍
抽象工厂模式是一种为访问类提供创建一组相关或相互依赖对象的接口,且访问类无需指定所要产品的具体类就能得到同族不同等级的机构模式。
优点
1.代码解耦,创建实例的工作与使用实例的工作分开,使用者不必关心类对象如何创建;
2.可对同一组产品共同管理。
缺点
1.每增加一个产品时都要修改抽象类。
使用场景
有多个产品组合时,具体工厂创建同一个产品组不同的产品时。
实现
抽象工厂模式由抽象产品类、具体产品类、抽象工厂类、具体工厂类构成。
/**
* 抽象产品
*/
public interface Phone {
void showPhone();
}
/**
* 抽象产品
*/
public interface Pad {
void showPad();
}
/**
* 具体产品
*/
public class HuaWeiPhone implements Phone {
@Override
public void showPhone() {
Log.e("test","华为手机");
}
}
/**
* 具体产品
*/
public class XiaoMiPhone implements Phone {
@Override
public void showPhone() {
Log.e("test","小米手机");
}
}
/**
* 具体产品
*/
public class HuaWeiPad implements Pad {
@Override
public void showPad() {
Log.e("test","华为平板");
}
}
/**
* 具体产品
*/
public class XiaoMiPad implements Pad {
@Override
public void showPad() {
Log.e("test","小米平板");
}
}
/**
* 抽象工厂类 电子代工厂
*/
public interface ElectronFactory {
Phone createPhone();
Pad createPad();
}
/**
* 具体工厂 富士康代工厂
*/
public class FskFactory implements ElectronFactory{
@Override
public Phone createPhone() {
return new HuaWeiPhone();
}
@Override
public Pad createPad() {
return new XiaoMiPad();
}
}
/**
* 具体工厂 比亚迪代工厂
*/
public class BydFactory implements ElectronFactory{
@Override
public Phone createPhone() {
return new XiaoMiPhone();
}
@Override
public Pad createPad() {
return new HuaWeiPad();
}
}
//抽象工厂模式实现
ElectronFactory fskfactory=new FskFactory();
fskfactory.createPhone().showPhone();
fskfactory.createPad().showPad();
ElectronFactory bydfactory=new BydFactory();
bydfactory.createPhone().showPhone();
bydfactory.createPad().showPad();
//打印
2022-02-25 14:15:14.785 5189-5189/com.test E/test: 华为手机
2022-02-25 14:15:14.786 5189-5189/com.test E/test: 小米平板
2022-02-25 14:15:14.786 5189-5189/com.test E/test: 小米手机
2022-02-25 14:15:14.786 5189-5189/com.test E/test: 华为平板