1.3 抽象工厂模式
Creator: 定义了产品生产的一系列行为;
ConcreteCreator1: 工厂1
ConcreteCreator2:工厂2
不同的工厂生产不同的东西;
ProductA: 抽象接口方法
ProductB:抽象接口方法
ProductA1:
ProductA2:
ProductB1:
ProductB2:
具体的抽象的方法(也就是具体的产品)他们是工厂创建的(ConcreteCreator)
产品等级和产品族如图上会帮助大家更好的理解;
小米手机和华为属于同一的产品等级结构;
小米手机和小米路由器属于同一家族;
相对固定的产品族可以考虑使用使用抽象工厂的模式经常变动的话就并不推荐了;
按照图形逻辑我们来实现下:
代码结构如下:
IphoneProduct
//手机产品接口 public interface IphoneProduct { void start();//开机 void shutdown();//关机 void callup();//打电话 void sendms();//发短信 }
XiaomiIphone
public class XiaomiIphone 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 sendms() { System.out.println("小米手机发短信"); } }
HuweiIphone
public class HuweiIphone 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 sendms() { System.out.println("华为手机发短信"); } }
IRouterProduct
public interface IRouterProduct { void start();//开机 void shutdown();//管家 void callup();//开机 void seeting();//设置 }
HuweiRouter
public class HuweiRouter implements IRouterProduct{ @Override public void start() { System.out.println("华为路由器开机"); } @Override public void shutdown() { System.out.println("华为路由器关机"); } @Override public void callup() { System.out.println("华为路由器打电话"); } @Override public void seeting() { System.out.println("华为路由器设置"); } }
XiaomiRouter
public class XiaomiRouter implements IRouterProduct{ @Override public void start() { System.out.println("小米路由器开机"); } @Override public void shutdown() { System.out.println("小米路由器关机"); } @Override public void callup() { System.out.println("小米路由器打电话"); } @Override public void seeting() { System.out.println("小米路由器设置"); } }
IProductFactory 抽象产品工厂
//抽象产品工厂 public interface IProductFactory { //手机工厂 IphoneProduct IphoneProduct(); //路由器工厂 IRouterProduct IRouterProduct(); }
HuaweiFactory
public class HuaweiFactory implements IProductFactory{ @Override public IphoneProduct IphoneProduct() { return new HuweiIphone(); } @Override public IRouterProduct IRouterProduct() { return new HuweiRouter(); } }
XiaomiFactory
public class XiaomiFactory implements IProductFactory{ @Override public IphoneProduct IphoneProduct() { return new XiaomiIphone(); } @Override public IRouterProduct IRouterProduct() { return new XiaomiRouter(); } }
Client 控制台
public class Client { public static void main(String[] args) { System.out.println("-----------------------小米产品----------------------"); XiaomiFactory xiaomiFactory = new XiaomiFactory(); IphoneProduct iphoneProduct = xiaomiFactory.IphoneProduct(); iphoneProduct.start(); iphoneProduct.callup(); iphoneProduct.sendms(); IRouterProduct iRouterProduct = xiaomiFactory.IRouterProduct(); iRouterProduct.seeting(); iRouterProduct.shutdown(); iRouterProduct.start(); System.out.println("-----------------------华为产品----------------------"); HuaweiFactory huaweiFactory = new HuaweiFactory(); IphoneProduct iphoneProduct1 = huaweiFactory.IphoneProduct(); iphoneProduct1.start(); iphoneProduct1.callup(); iphoneProduct1.sendms(); IRouterProduct iRouterProduct2 = huaweiFactory.IRouterProduct(); iRouterProduct2.seeting(); iRouterProduct2.shutdown(); iRouterProduct2.start(); } }
运行结果如下:
其实写完代码;我个人对抽象接口的理解就是一个接口一个实现;老子管儿子,儿子管孙子这么一个概念;接口不断的封装继续;其实大型项目结构稳定的使用是ok的经常变化的你今天加几个接口明天加几个也很麻烦,根据自己的业务逻辑自行判断吧;
1.4 总结
设计模式只是一种思想;