抽象工厂模式 (AbstractFactory)
作者:互联网
目录
基本介绍
概述:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
定义:一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
特点:
- 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理
- 当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组
- 抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则
缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
模式结构
抽象工厂(Abstract Factory):提供了创建产品的接口,它包含多个创建产品的方法newProduct(),可以创建多个不同等级的产品。
具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系。
图解
模式结构图 | |
实例图解 |
具体实现
//手机产品接口 public interface IphoneProduct { void start(); void shutdown(); void callup(); void sendSMS(); }
//路由器产品接口 public interface IRouterProduct { void start(); void shutdown(); void openWife(); void setting(); }
//小米手机 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 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 XiaomiRouter implements IRouterProduct { @Override public void start() { System.out.println("启动小米路由器"); } @Override public void shutdown() { System.out.println("关闭小米路由器"); } @Override public void openWife() { System.out.println("打开小米wifi"); } @Override public void setting() { 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 openWife() { System.out.println("打开华为wifi"); } @Override public void setting() { System.out.println("华为设置"); } }
//抽象产品工厂 public interface IProductFactory { //生产手机 IphoneProduct iphoneProduct(); //生产路由器 IRouterProduct routerProduct(); }
//小米手机工厂 public class XiaomiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new XiaomiPhone(); } @Override public IRouterProduct routerProduct() { return new XiaomiRouter(); } }
//华为手机工厂 public class HuaweiFactory implements IProductFactory { @Override public IphoneProduct iphoneProduct() { return new HuaweiPhone(); } @Override public IRouterProduct routerProduct() { return new HuaweiRouter(); } }
//实现类 public class Client { public static void main(String[] args) { System.out.println("-----------小米-----------"); //小米工厂 XiaomiFactory xiaomiFactory = new XiaomiFactory(); IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.sendSMS(); IRouterProduct iRouterProduct = xiaomiFactory.routerProduct(); iRouterProduct.openWife(); System.out.println("-----------华为-----------"); //华为工厂 HuaweiFactory huaweiFactory = new HuaweiFactory(); iphoneProduct = huaweiFactory.iphoneProduct(); iphoneProduct.callup(); iphoneProduct.sendSMS(); iRouterProduct = huaweiFactory.routerProduct(); iRouterProduct.openWife(); } }
运行结果:
-----------小米-----------
小米手机打电话
小米手机发短信
打开小米wifi
-----------华为-----------
华为手机打电话
华为手机发短信
打开华为wifi
标签:void,System,工厂,println,抽象,AbstractFactory,Override,public,out 来源: https://blog.csdn.net/fhsbvs/article/details/120766013