抽象工厂模式介绍
抽象工厂模式:模式介绍
抽象工厂模式和工厂方法模式区别为: 工厂方法模式的工厂只能创建单一产品,抽象工厂模式的工厂可以创建多个产品(一类产品即产品簇)。此示例中,分别有两个具体工厂,分别为现代风格家具工厂和维多利亚风格家具工厂。现代风格家具工厂可以生产多种现代风格的家具,分别为现代风格的椅子、沙发、咖啡桌;维多利亚风格家具工厂可以生产多种维多利亚风格家具,分别为维多利亚风格的椅子、沙发、咖啡桌。
模式代码实现
产品
Chair
chair/Chair.java
package abstract_factory.chair;
/**
* 椅子接口
*/
public interface Chair {
void hasLeg();
}
chair/ModernChair.java
package abstract_factory.chair;
/**
* 现代风格椅子
*/
public class ModernChair implements Chair {
@Override
public void hasLeg() {
System.out.println("Modern chair has no leg.");
}
}
chair/VictoriaChair.java
package abstract_factory.chair;
/**
* 维多利亚风格椅子
*/
public class VictoriaChair implements Chair {
@Override
public void hasLeg() {
System.out.println("Victoria chair has leg.");
}
}
Sofa
sofa/Sofa.java
package abstract_factory.sofa;
/**
* 沙发接口
*/
public interface Sofa {
void sitOn();
}
sofa/ModernSofa.java
package abstract_factory.sofa;
/**
* 现代风格沙发
*/
public class ModernSofa implements Sofa {
@Override
public void sitOn() {
System.out.println("Modern sofa sit on.");
}
}
sofa/VictoriaSofa.java
package abstract_factory.sofa;
/**
* 维多利亚风格沙发
*/
public class VictoriaSofa implements Sofa {
@Override
public void sitOn() {
System.out.println("Victory sofa sit on.");
}
}
Coffee Table
coffee_table/CoffeeTable.java
package abstract_factory.coffee_table;
/**
* 咖啡桌接口
*/
public interface CoffeeTable {
void putCoffee();
}
coffee_table/ModernCoffeeTable.java
package abstract_factory.coffee_table;
/**
* 现代风格咖啡桌
*/
public class ModernCoffeeTable implements CoffeeTable {
@Override
public void putCoffee() {
System.out.println("Modern coffee table put coffee.");
}
}
coffee_table/VictoriaCoffeeTable.java
package abstract_factory.coffee_table;
/**
* 维多利亚风格咖啡桌
*/
public class VictoriaCoffeeTable implements CoffeeTable {
@Override
public void putCoffee() {
System.out.println("Victoria coffee table put coffee.");
}
}
工厂
factory/FurnitureFactory.java
package abstract_factory.factory;
import abstract_factory.chair.Chair;
import abstract_factory.coffee_table.CoffeeTable;
import abstract_factory.sofa.Sofa;
/**
* 抽象家具工厂
*/
public interface FurnitureFactory {
Chair createChair();
CoffeeTable createCoffeeTable();
Sofa createSofa();
}
factory/ModernFurnitureFactory.java
package abstract_factory.factory;
import abstract_factory.chair.Chair;
import abstract_factory.chair.ModernChair;
import abstract_factory.coffee_table.CoffeeTable;
import abstract_factory.coffee_table.ModernCoffeeTable;
import abstract_factory.factory.FurnitureFactory;
import abstract_factory.sofa.ModernSofa;
import abstract_factory.sofa.Sofa;
/**
* 现代风格家具工厂
*/
public class ModernFurnitureFactory implements FurnitureFactory {
@Override
public Chair createChair() {
return new ModernChair();
}
@Override
public CoffeeTable createCoffeeTable() {
return new ModernCoffeeTable();
}
@Override
public Sofa createSofa() {
return new ModernSofa();
}
}
factory/VictoriaFurnitureFactory.java
package abstract_factory.factory;
import abstract_factory.chair.Chair;
import abstract_factory.chair.VictoriaChair;
import abstract_factory.coffee_table.CoffeeTable;
import abstract_factory.coffee_table.VictoriaCoffeeTable;
import abstract_factory.factory.FurnitureFactory;
import abstract_factory.sofa.Sofa;
import abstract_factory.sofa.VictoriaSofa;
/**
* 维多利亚风格家具工厂
*/
public class VictoriaFurnitureFactory implements FurnitureFactory {
@Override
public Chair createChair() {
return new VictoriaChair();
}
@Override
public CoffeeTable createCoffeeTable() {
return new VictoriaCoffeeTable();
}
@Override
public Sofa createSofa() {
return new VictoriaSofa();
}
}
测试
测试代码
package abstract_factory;
import abstract_factory.chair.Chair;
import abstract_factory.coffee_table.CoffeeTable;
import abstract_factory.factory.FurnitureFactory;
import abstract_factory.factory.ModernFurnitureFactory;
import abstract_factory.factory.VictoriaFurnitureFactory;
import abstract_factory.sofa.Sofa;
/**
* 测试类
*/
public class Main {
public static void main(String[] args) {
// 创建现代风格家具
FurnitureFactory furnitureFactory1 = new ModernFurnitureFactory();
Chair chair1 = furnitureFactory1.createChair();
chair1.hasLeg();
CoffeeTable coffeeTable1 = furnitureFactory1.createCoffeeTable();
coffeeTable1.putCoffee();
Sofa sofa1 = furnitureFactory1.createSofa();;
sofa1.sitOn();
// 创建维多利亚风格家具
FurnitureFactory furnitureFactory2 = new VictoriaFurnitureFactory();
Chair chair2 = furnitureFactory2.createChair();
chair2.hasLeg();
CoffeeTable coffeeTable2 = furnitureFactory2.createCoffeeTable();
coffeeTable2.putCoffee();
Sofa sofa2 = furnitureFactory2.createSofa();
sofa2.sitOn();
}
}
测试结果
参考
[1] REFACTORING.GURU.抽象工厂模式