抽象 工厂模式
Posted jinronga
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象 工厂模式相关的知识,希望对你有一定的参考价值。
抽象 工厂模式
抽象工厂模式:
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂
定义:
抽象工厂模式提供了一个创建一系列相关或者相互依赖的接口,无需指定它们具体的类。
使用场景:
1.客户端(应用层)不依赖产品类实例如何被创建,实现等细节
2.强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复的代码
3.提供一个产品类的库,所有的产品以同样的接口出来,从而使得客户端不依赖于实现
优点:
- 具体产品在应用层的代码隔离,无需关心创建的细节
- 将一个产品统一到一起创建
缺点:
- 规定了所有可能被创建产品集合,产品族中扩展新的产品困难。
- 增加了系统的抽象性和理解难度
案例:
IphoneProduct 接口:
//手机产品接口
public interface IphoneProduct {
void start();
void shutdown();
void callup();
void sendSMS();
}
IRouterProduct接口:
//路由产品接口
public interface IRouterProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
IProductFactory 接口:
抽象的工厂,其他工厂的工厂(既是华为的工厂,也是小米的工厂)
public interface IProductFactory {
//手机产品
IphoneProduct iphoneProduct();
//路由器产品
IRouterProduct irouterProduct();
}
Miphone:小米手机
//小米手机
public class Miphone 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("小米手机发短信");
}
}
MiRouter:小明路由器
public class MiRouter 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("设置小米WiFi");
}
}
MiFactory:小米工厂
public class MiFactory implements IProductFactory{
@Override
public IphoneProduct iphoneProduct() {
return new Miphone();
}
@Override
public IRouterProduct irouterProduct() {
return new MiRouter();
}
}
HuaweiPhone华为手机
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("华为手机发短信");
}
}
华为路由器:HuaweiRouter
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("设置华为WiFi");
}
}
HuaweiFactory:华为工厂
public class HuaweiFactory implements IProductFactory{
@Override
public IphoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new HuaweiRouter();
}
}
客户:Client
public class Client {
public static void main(String[] args) {
System.out.println("======小米系列产品======");
MiFactory miFactory = new MiFactory();
//小米手机
System.out.println("小米手机产品");
IphoneProduct iphoneProduct = miFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.shutdown();
iphoneProduct.callup();
iphoneProduct.sendSMS();
//小米路由器
System.out.println("小米路由器");
IRouterProduct iRouterProduct = miFactory.irouterProduct();
iRouterProduct.openWifi();
iRouterProduct.start();
iRouterProduct.setting();
iRouterProduct.shutdown();
System.out.println("======华为系列产品======");
//创建华为工厂
HuaweiFactory huaweiFactory = new HuaweiFactory();
System.out.println("华为手机");
//得到抽象工厂的华为手机工厂
IphoneProduct huaweiIphone = huaweiFactory.iphoneProduct();
huaweiIphone.start();
huaweiIphone.callup();
huaweiIphone.sendSMS();
huaweiIphone.shutdown();
System.out.println("华为路由器");
IRouterProduct iRouter = huaweiFactory.irouterProduct();
iRouter.start();
iRouter.openWifi();
iRouter.setting();
iRouter.shutdown();
}
}
以上是关于抽象 工厂模式的主要内容,如果未能解决你的问题,请参考以下文章