抽象工厂模式,首先通过该抽象接口创建出不同的工厂对象,根据不同的工厂对象创建不同的对象。
- 工厂模式:举例,工厂有两个产品线Phone和PC,品牌分别有huawei和apple
- 抽象工厂定义:
public abstract class AbstractFactory
{
public abstract Phone createPhone(String brand);
public abstract PC createPC(String brand);
}
- Phone类定义:
public interface Phone
{
String call();
}
public class PhoneHuawei implements Phone
{
@Override
public String call()
{
return "call someone by huawei phone";
}
}
public class PhoneApple implements Phone
{
@Override
public String call()
{
return "call someone by apple phone";
}
}
- phone工厂类定义:
public class PhoneFactory extends AbstractFactory
{
@Override
public Phone createPhone(String brand)
{
if ("Huawei".equals(brand))
{
return new PhoneHuawei();
}
else if ("Apple".equals(brand))
{
return new PhoneApple();
}
else
{
return null;
}
}
@Overrid
public PC createPC(String brand)
{
return null;
}
}
- PC类定义:
public interface PC
{
String internet();
}
public class PCHuawei implements PC
{
@Override
public String internet()
{
return "surf the internet by huawei PC";
}
}
public class PCApple implements PC
{
@Override
public String internet()
{
return "surf the internet by apple PC";
}
}
- PC工厂类定义:
public class PCFactory extends AbstractFactory
{
@Override
public Phone createPhone(String brand)
{
return null;
}
@Overrid
public PC createPC(String brand)
{
if ("Huawei".equals(brand))
{
return new PCHuawei();
}
else if ("Apple".equals(brand))
{
return new PCApple();
}
else
{
return null;
}
}
}
- 使用抽象工厂:
public static void main(String[] args)
{
AbstractFactory phoneFactory = new PhoneFactory();
Phone phoneHuawei = phoneFactory.createPhone("Huawei");
Phone phoneApple = phoneFactory.createPhone("Apple");
logger.info(phoneHuawei.call());
logger.info(phoneApple.call());
AbstractFactory pcFactory = new ComputerFactory();
PC pcHuawei = pcFactory.createPC("Huawei");
PC pcApple = pcFactory.createPC("Apple");
logger.info(pcHuawei.internet());
logger.info(pcApple.internet());
}