抽象工厂模式-Abstract Factory(Java实现)
抽象工厂模式-Abstract Factory
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
本文以github上iluwatar的例子为例.
一个国家有军队, 城堡, 国王. 如果想要创建一个王国(国家), 那么就需要在每个国家创建时都要去重复这些定义.
所以用抽象工厂模式, 把创建王国的这个工厂抽象出来. 国家的组成成分都是这些,在抽象工厂中只需要定义出来即可, 国家之间只是细节不一样, 所以由具体的王国来实现具体的军队/城堡/王国工厂的实现.
接口的定义
Army接口
/** * 军队 */ public interface Army { String getDescription(); }
Castle接口
/** * 城堡 */ public interface Castle { String getDescription(); }
King接口
/** * 国王 */ public interface King { String getDescription(); }
KingdomFactory接口
可以创建国家的工厂的抽象定义.
/** * 国家 */ public interface KingdomFactory { Castle createCastle(); King createKing(); Army createArmy(); }
具体工厂的实现
到此为止, 抽象定义都完成了, 让我们来看一下如果想要创建一个国家, 需要继续实现哪些内容.
不只是创建第一个国家, 以后每次加一个国家, 都是如此, 不需要去改动底层的抽象定义.
咱们开始创建一个奥克斯王国吧
OrcArmy类
public class OrcArmy implements Army { private static final String DESCRIPTION = "这是奥克斯王国的军队!"; @Override public String getDescription() { return DESCRIPTION; } }
OrcCastle类
public class OrcCastle implements Castle { private static final String DESCRIPTION = "这是奥克斯王国的城堡!"; @Override public String getDescription() { return DESCRIPTION; } }
OrcKing类
public class OrcKing implements King { private static final String DESCRIPTION = "这是奥克斯王国的国王!"; @Override public String getDescription() { return DESCRIPTION; } }
OrcKingdomFactory类
public class OrcKingdomFactory implements KingdomFactory { @Override public Castle createCastle() { return new OrcCastle(); } @Override public King createKing() { return new OrcKing(); } @Override public Army createArmy() { return new OrcArmy(); } }
Main
用于测试运行
public class Main { public static void main(String[] args) { KingdomFactory factory = new OrcKingdomFactory(); Army orcArmy = factory.createArmy(); King orcKing = factory.createKing(); Castle orcCastle = factory.createCastle(); System.out.println(orcArmy.getDescription()); System.out.println(orcKing.getDescription()); System.out.println(orcCastle.getDescription()); } }
---------------------------------------------------------
学如不及,犹恐失之
学如不及,犹恐失之