目录
一、简介
工厂模式的本质都是将具体产品在应用层的代码隔离
在应用层创建时无需关心创建的细节(如参数等)
二、抽象工厂模式
1.抽象工厂模式和工厂方法模式的区别
抽象工厂模式要解决的问题比较复杂,不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,类
似于一个超级工程,而每个实际工厂则负责创建多个实际的产品。
这种模式类似于多个供应商提供一系列类型的产品
2.例子(华为和苹果供应商提供一系列类型的产品)
手机产品接口和实现类
public interface PhoneProduct {
void bootup();//开机功能
void shutdown();//关机功能
void phonecall();//打电话功能
}
class ApplePhoneProduct implements PhoneProduct{
@Override
public void bootup() {
System.out.println("苹果手机开机啦");
}
@Override
public void shutdown() {
System.out.println("苹果手机关机啦");
}
@Override
public void phonecall() {
System.out.println("苹果手机打电话啦");
}
}
class HuaweiPhoneProduct implements PhoneProduct{
@Override
public void bootup() {
System.out.println("华为手机开机啦");
}
@Override
public void shutdown() {
System.out.println("华为手机关机啦");
}
@Override
public void phonecall() {
System.out.println("华为手机打电话啦");
}
}
平板产品接口和实现类
public interface PadProduct {
void bootup();//开机功能
void shutdown();//关机功能
void pencil();//手写笔功能
}
class ApplePadProduct implements PadProduct{
@Override
public void bootup() {
System.out.println("苹果平板开机啦");
}
@Override
public void shutdown() {
System.out.println("苹果平板关机啦");
}
@Override
public void pencil() {
System.out.println("苹果平板能用手写笔啦");
}
}
class HuaweiPadProduct implements PadProduct{
@Override
public void bootup() {
System.out.println("华为平板开机啦");
}
@Override
public void shutdown() {
System.out.println("华为平板关机啦");
}
@Override
public void pencil() {
System.out.println("华为平板能用手写笔啦");
}
}
抽象工厂接口和实现类
public interface AbstractFactory {
PadProduct PadProduct();//工厂要有平板生产线
PhoneProduct PhoneProduct();//工厂要有手机生产线
}
class AppleFactory implements AbstractFactory{
@Override
public PadProduct PadProduct() {
return new ApplePadProduct();
}
@Override
public PhoneProduct PhoneProduct() {
return new ApplePhoneProduct();
}
}
class HuaweiFactory implements AbstractFactory{
@Override
public PadProduct PadProduct() {
return new HuaweiPadProduct();
}
@Override
public PhoneProduct PhoneProduct() {
return new HuaweiPhoneProduct();
}
}
消费者根据品牌工厂拿产品
public class AAConsumer {
public static void main(String[] args) {
System.out.println("=======苹果产品=======");
AppleFactory appleFactory = new AppleFactory();
PadProduct applePadProduct = appleFactory.PadProduct();
applePadProduct.bootup();
applePadProduct.pencil();
applePadProduct.shutdown();
PhoneProduct applePhoneProduct = appleFactory.PhoneProduct();
applePhoneProduct.bootup();
applePhoneProduct.phonecall();
applePhoneProduct.shutdown();
System.out.println("=======华为产品=======");
HuaweiFactory huaweiFactory = new HuaweiFactory();
PadProduct huaweiPadProduct = huaweiFactory.PadProduct();
huaweiPadProduct.bootup();
huaweiPadProduct.pencil();
huaweiPadProduct.shutdown();
PhoneProduct huaweiPhoneProduct = huaweiFactory.PhoneProduct();
huaweiPhoneProduct.bootup();
huaweiPhoneProduct.phonecall();
huaweiPhoneProduct.shutdown();
}
}