抽象工厂模式
抽象工厂模式
定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们的具体类
适用场景:
客户端(应用层)不依赖与产品类实例如何被创建、实现等细节
强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复代码
提供一个产品族的库,所有产品以相同的接口出现,从俄日使得客户端不依赖于具体的实现
优点:
具体产品在应用层的代码隔离,无需关心细节
将一个系列的产品统一到一起创建
缺点:
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难;
增加了系统的抽象性和理解难度
代码:
package com.example.designPattern23.factory.abstract1;
public interface IPhoneProduct {
void start();
void shutdown();
void call();
void sendSms();
}
package com.example.designPattern23.factory.abstract1;
public interface IRouterProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
package com.example.designPattern23.factory.abstract1;
public class HuaweiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("华为手机开机");
}
@Override
public void shutdown() {
System.out.println("华为手机关机");
}
@Override
public void call() {
System.out.println("华为手机打电话");
}
@Override
public void sendSms() {
System.out.println("华为手机发短信");
}
}
package com.example.designPattern23.factory.abstract1;
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("华为路由器开机");
}
@Override
public void shutdown() {
System.out.println("华为路由器关机");
}
@Override
public void openWifi() {
System.out.println("华为路由器打开wifi");
}
@Override
public void setting() {
System.out.println("华为路由器设置wifi");
}
}
package com.example.designPattern23.factory.abstract1;
public class XiaomiPhone implements IPhoneProduct {
@Override
public void start() {
System.out.println("小米手机开机");
}
@Override
public void shutdown() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
@Override
public void sendSms() {
System.out.println("小米手机发短信");
}
}
package com.example.designPattern23.factory.abstract1;
public class XiaomiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("小米路由器开机");
}
@Override
public void shutdown() {
System.out.println("小米路由器关机");
}
@Override
public void openWifi() {
System.out.println("小米路由器打开wifi");
}
@Override
public void setting() {
System.out.println("小米路由器设置wifi");
}
}
package com.example.designPattern23.factory.abstract1;
public interface IProductFactory {
IPhoneProduct IPhoneProduct();
IRouterProduct IRouterProduct();
}
package com.example.designPattern23.factory.abstract1;
public class HuaweiProductFactory implements IProductFactory {
@Override
public IPhoneProduct IPhoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct IRouterProduct() {
return new HuaweiRouter();
}
}
package com.example.designPattern23.factory.abstract1;public class XiaomiProductFactory implements IProductFactory { @Override public IPhoneProduct IPhoneProduct() { return new XiaomiPhone(); } @Override public IRouterProduct IRouterProduct() { return new XiaomiRouter(); }}
package com.example.designPattern23.factory.abstract1;public class Client { public static void main(String[] args) { // 华为产品展销 HuaweiProductFactory huaweiProductFactory = new HuaweiProductFactory(); IPhoneProduct iPhoneProduct = huaweiProductFactory.IPhoneProduct(); iPhoneProduct.start(); iPhoneProduct.call(); IRouterProduct iRouterProduct = huaweiProductFactory.IRouterProduct(); iRouterProduct.openWifi(); // 小米产品展销 XiaomiProductFactory xiaomiProductFactory = new XiaomiProductFactory(); iPhoneProduct = xiaomiProductFactory.IPhoneProduct(); iPhoneProduct.start(); iPhoneProduct.call(); }}
结果:
华为手机开机华为手机打电话华为路由器打开wifi小米手机开机小米手机打电话