这里我们根据前面提到的这个抽象工厂进行代码编写
1. 定义抽象产品接口
首先,我们定义手机和路由器的抽象接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public interface IPhoneProduct { void start(); void shutdown(); void callup(); void sendSMS(); }
public interface IRouterProduct { void start(); void shutdown(); void openWiFi(); void setting(); }
|
2. 定义具体产品类
接下来,我们实现这些接口,创建具体的产品类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| public class HuaweiPhone implements IPhoneProduct { @Override public void start() { System.out.println("华为手机开机"); }
@Override public void shutdown() { System.out.println("华为手机关机"); }
@Override public void callup() { System.out.println("华为手机打电话"); }
@Override public void sendSMS() { 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 callup() { System.out.println("小米手机打电话"); }
@Override public void sendSMS() { System.out.println("小米手机发送短信"); } }
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("华为路由器设置"); } }
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("小米路由器设置"); } }
|
3. 定义抽象工厂接口
然后,我们定义一个抽象工厂接口,包含创建手机和路由器的方法。
1 2 3 4 5
| public interface IProductFactory { IPhoneProduct phoneProduct(); IRouterProduct routerProduct(); }
|
4. 实现具体工厂类
我们分别创建华为和小米的工厂类,实现抽象工厂接口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class HuaweiFactory implements IProductFactory { @Override public IPhoneProduct phoneProduct() { return new HuaweiPhone(); }
@Override public IRouterProduct routerProduct() { return new HuaweiRouter(); } }
public class XiaomiFactory implements IProductFactory { @Override public IPhoneProduct phoneProduct() { return new XiaomiPhone(); }
@Override public IRouterProduct routerProduct() { return new XiaomiRouter(); } }
|
5. 客户端代码
最后,我们在客户端代码中使用抽象工厂来创建产品。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class Client { public static void main(String[] args) { IProductFactory huaweiFactory = new HuaweiFactory(); IPhoneProduct huaweiPhone = huaweiFactory.phoneProduct(); IRouterProduct huaweiRouter = huaweiFactory.routerProduct();
huaweiPhone.start(); huaweiPhone.callup(); huaweiRouter.start(); huaweiRouter.openWiFi();
IProductFactory xiaomiFactory = new XiaomiFactory(); IPhoneProduct xiaomiPhone = xiaomiFactory.phoneProduct(); IRouterProduct xiaomiRouter = xiaomiFactory.routerProduct();
xiaomiPhone.start(); xiaomiPhone.callup(); xiaomiRouter.start(); xiaomiRouter.openWiFi(); } }
|
6. 运行结果
当你运行客户端代码时,输出将如下所示:
1 2 3 4 5 6 7 8
| 华为手机开机 华为手机打电话 华为路由器启动 华为路由器打开WiFi 小米手机开机 小米手机打电话 小米路由器启动 小米路由器打开WiFi
|
小结
这个例子展示了如何使用抽象工厂模式创建相关的产品族。通过这种模式,我们可以轻松地扩展新的产品类型(如添加新的品牌),而无需修改现有的代码结构。抽象工厂模式非常适合需要创建一组相关产品的场景。