打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
7.3 抽象工厂模式
一. 概念
抽象工厂模式可以向客户端提供一个接口,是的客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。

二. 对象
抽象工厂(AbstractFactory)角色:担任这个角色的是工厂模式的核心,它是与应用系统的商业逻辑无关的。
具体工厂类(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。
抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类。
具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品的实例。

三. 实现
假设现在要生产Car和Boat两种产品,其中Car和Boat是两个抽象类,即抽象产品角色,而Car和Boat又分为电动的和汽油的两种,抽象工厂中会有生产Car和生产Boat两个方法,而具体工厂中又会有电力工厂和汽油工厂两种。
Test.java
public class Test {
public static void main(String[] args) {
VehicleFactory elecFactory = new ElecFactory();
VehicleFactory oilFactory = new OilFactory();
Car elecCar = elecFactory.createCar();
Boat elecBoat = elecFactory.createBoat();
Car oilCar = oilFactory.createCar();
Boat oilBoat = oilFactory.createBoat();
elecCar.run();
oilCar.run();
elecBoat.floatage();
oilBoat.floatage();
}
}
测试类,这里VehicleFactory为抽象工厂,ElecFactory和OilFactory为两个抽象方法。

Car.java
public interface Car {
//汽车的跑方法
public void run();
}
汽车的抽象类,抽象产品。

Boat.java
public interface Boat {
//船的漂浮方法
public void floatage();
}
船的抽象类,抽象产品。

ElecCar.java
public class ElecCar implements Car {

@Override
public void run() {
System.out.println("我是电力车,我很环保");
}

}
电力汽车,具体产品。

OilCar.java
public class OilCar implements Car {

@Override
public void run() {
System.out.println("我是汽油车,我动力很足");
}

}
汽油汽车,具体产品。

ElecBoat.java
public class ElecBoat implements Boat {

@Override
public void floatage() {
System.out.println("我是电力船,我漂起来很慢");
}

}
电力船,抽象产品。

OilBoat.java
public class OilBoat implements Boat {

@Override
public void floatage() {
System.out.println("我是汽油船,我漂起来很快");
}

}
汽油船,具体产品。

VehicleFactory.java
public interface VehicleFactory {
public Car createCar();
public Boat createBoat();
}
抽象工厂,生产Car和Boat。

ElecFactory.java
public class ElecFactory implements VehicleFactory {

@Override
public Car createCar() {
return new ElecCar();
}

@Override
public Boat createBoat() {
return new ElecBoat();
}

}
电力工厂,具体工厂。

OilFactory.java
public class OilFactory implements VehicleFactory {

@Override
public Car createCar() {
return new OilCar();
}

@Override
public Boat createBoat() {
return new OilBoat();
}

}
汽油工厂,具体工厂。

三. 总结
这样就是抽象工厂模式,可以发现如果增加生产的类型,如添加一个太阳能类型,那么很简单,只要新建一个太阳能工厂继承抽象工厂,然后新建一个太阳能汽车和太阳能船即可,但是如果增加一个品种,如增加生产火车,就不太好了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java设计模式———工厂模式(工厂方法模式)
学习:java设计模式
c#设计模式之简单工厂
面试重点:设计模式(二)——创建模式
设计模式学习笔记(五)——FactoryMethod工厂模式 - KiddLee - 博客园
抽象工厂模式(Abstract Factory Pattern)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服