抽象工厂模式
定义
- 提供一个创建一系列的相关的或者依赖的对象的接口,无需指定它们的具体实现类,具体的时间分别在子类工厂中产生。
- 用来生产不同产品族的全部产品。对于增加新的产品,无能为力;支持增加产品族。
优点
- 具体产品在应用层的代码隔离,无需关心创建的细节。
- 将一个系列的产品统一到一起创建。
缺点
- 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难。
- 增加了系统的抽象性和理解难度。
代码
//手机产品接口
public interface IPhoneProduct {
void start();
void shutdown();
void call();
void sendMessage();
}
//路由器产品接口
public interface IRouterProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
//苹果手机
public class ApplePhone 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 sendMessage() {
System.out.println("苹果手机发短信");
}
}
//小米手机
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 sendMessage() {
System.out.println("小米手机发短信");
}
}
//苹果路由器
public class AppleRouter 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("苹果路由器设置");
}
}
//小米路由器
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("小米路由器设置");
}
}
//抽象产品工厂
public interface IProductFactory {
//生产手机
IPhoneProduct iPhoneProduct();
//生产路由器
IRouterProduct iRouterProduct();
}
//小米工厂
public class XiaoMiFactory implements IProductFactory {
@Override
public IPhoneProduct iPhoneProduct() {
return new XiaoMiPhone();
}
@Override
public IRouterProduct iRouterProduct() {
return new XiaoMiRouter();
}
}
//苹果工厂
public class AppleFactory implements IProductFactory {
@Override
public IPhoneProduct iPhoneProduct() {
return new ApplePhone();
}
@Override
public IRouterProduct iRouterProduct() {
return new AppleRouter();
}
}
public class Client {
public static void main(String[] args) {
//小米工厂
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
//小米手机
IPhoneProduct iPhoneProduct = xiaoMiFactory.iPhoneProduct();
iPhoneProduct.call();
iPhoneProduct.sendMessage();
//小米路由器
IRouterProduct iRouterProduct = xiaoMiFactory.iRouterProduct();
iRouterProduct.openWifi();
iRouterProduct.setting();
//苹果工厂
AppleFactory appleFactory = new AppleFactory();
//苹果手机
IPhoneProduct iPhoneProduct1 = appleFactory.iPhoneProduct();
iPhoneProduct1.start();
iPhoneProduct1.shutdown();
//苹果路由器
IRouterProduct iRouterProduct1 = appleFactory.iRouterProduct();
iRouterProduct1.start();
iRouterProduct1.shutdown();
}
}