小白都能懂的设计模式 java版 抽象工厂模式 实战练习(超详细)

it2025-10-02  4

比如要生产华为手机,华为路由器,小米手机,小米路由器 先写路由器和手机的接口:

package abstract1; //手机产品接口 public interface IphoneProduct { void start(); void shutdown(); void callup(); void sendMes(); } package abstract1; //路由器产品接口 public interface IRouteProduct { void start(); void shutdown(); void openWifi(); void setting(); }

再分别实现一个小米手机和小米路由器 以及华为手机华为路由器

package abstract1; //小米手机 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 sendMes() { System.out.println("小米发短信"); } } package abstract1; //小米路由器 public class XiaomiRoute implements IRouteProduct { @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("小米设置"); } }

华为手机和路由器

package abstract1; //华为手机 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 sendMes() { System.out.println("华为手机发短信"); } } package abstract1; //华为路由器 public class HuaweiRoute implements IRouteProduct { @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("华为设置"); } }

再实现一个产品工厂接口,生产手机和路由器:

package abstract1; //抽象产品工厂 public interface IProductFactory { //生产手机 IphoneProduct iphoneProduct(); //生产路由器 IRouteProduct routerProduct(); }

然后再实现这个接口, 华为生产手机和路由器的工厂 小米生产手机和路由器的工厂:

package abstract1; //华为工厂 public class HuaweiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new HuaweiPhone(); } @Override public IRouteProduct routerProduct() { return new HuaweiRoute(); } } package abstract1; //小米工厂 public class XiaomiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new XiaomiPhone(); } @Override public IRouteProduct routerProduct() { return new XiaomiRoute(); } }

最后模拟一个client去调用

package abstract1; public class Client { public static void main(String[] args) { System.out.println("-----------小米系列产品------------"); //小米工厂 XiaomiFactory xiaomiFactory = new XiaomiFactory(); IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.shutdown(); IRouteProduct iRouteProduct = xiaomiFactory.routerProduct(); iRouteProduct.openWifi(); iRouteProduct.setting(); System.out.println("-----------华为系列产品------------"); //华为工厂 HuaweiFactory huaweiFactory = new HuaweiFactory(); iphoneProduct = huaweiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.shutdown(); iRouteProduct = huaweiFactory.routerProduct(); iRouteProduct.openWifi(); iRouteProduct.setting(); } }

总结一下,抽象工厂就是工厂的工厂

好了,今天就先到这里

最新回复(0)