抽象工厂模式
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽
象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以
向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产
品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类
型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实
例,而不是这些抽象产品的实例。也就是这些抽象产品的具体子类的实例。工厂
类负责创建抽象产品的具体子类的实例。
/*
* 所以产品的接口
*/
public interface Product {
public void get();//获取产品方法
}
/*
* htc工厂的接口
*/
public interface HTCFactory {
public Product getPhone();//生产手机方法
public Product getPad();//生产平板电脑方法
}
/*
* 手机的抽象父类
*/
public abstract class Phone implements Product{
public abstract void get();
}
/*
* 平板电脑的抽象父类
*/
public abstract class Pad implements Product{
public abstract void get();
}
/*
* 北京分店
*/
public class BeijingShop implements HTCFactory {
@Override
public Product getPhone() {
return new BeijingPhone();
}
@Override
public Product getPad() {
return new BeijingPad();
}
}
*
* 上海分店
*/
public class ShanghaiShop implements HTCFactory{
@Override
public Product getPhone() {
return new ShanghaiPhone();
}
@Override
public Product getPad() {
return new ShanghaiPad();
}
}
/*
* 购买北京分店平板电脑
*/
public class BeijingPad implements Product {
@Override
public void get() {
System.out.println("买到了北京分店的平板电脑");
}
}
/*
* 购买北京分店手机
*/
public class BeijingPhone implements Product {
@Override
public void get() {
System.out.println("买到了北京分店的手机");
}
}
/*
* 购买上海分店手机
*/
public class ShanghaiPhone implements Product {
@Override
public void get() {
System.out.println("买到了上海分店的手机!");
}
}
*
* 购买上海分店平板电脑
*/
public class ShanghaiPad implements Product {
@Override
public void get() {
System.out.println("买到了上海分店的平板电脑!");
}
}
/*
* 抽象工厂测试类
*/
public class AbstractFactorytest {
/**
* @param args
*/
public static void main(String[] args) {
//申明并实例化北京分店并购买了手机和平板电脑
BeijingShop beijingShop = new BeijingShop();
Product beijingShopPhone = beijingShop.getPhone();
beijingShopPhone.get();
Product beijingShopPad = beijingShop.getPad();
beijingShopPad.get();
//申明并实例化上海分店并购买了手机和平板电脑
ShanghaiShop shanghaiShop = new ShanghaiShop();
Product shanghaiShopPhone = shanghaiShop.getPhone();
shanghaiShopPhone.get();
Product shanghaiShopPad = shanghaiShop.getPad();
shanghaiShopPad.get();
}
}