参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著
实验目的
抽象工厂可以理解为多态工厂的增强版,一个具体的工厂类负责生产一组不同产品
实验代码
package AbstractFactory;
interface OperationController{
public void DoOperation();
}
class SymbianOperationController implements OperationController {
@Override
public void DoOperation() {
// TODO Auto-generated method stub
System.out.println("SymbianOperationController...");
}
}
class AndroidOperationController implements OperationController {
@Override
public void DoOperation() {
// TODO Auto-generated method stub
System.out.println("AndroidOperationController...");
}
}
class WindowsOperationController implements OperationController {
@Override
public void DoOperation() {
// TODO Auto-generated method stub
System.out.println("WindowsOperationController...");
}
}
interface InterfaceController{
public void DisplayInterface();
}
class SymbianInterfaceController implements InterfaceController{
@Override
public void DisplayInterface() {
// TODO Auto-generated method stub
System.out.println("SymbianInterfaceController...");
}
}
class AndroidInterfaceController implements InterfaceController{
@Override
public void DisplayInterface() {
// TODO Auto-generated method stub
System.out.println("AndroidInterfaceController...");
}
}
class WindowsInterfaceController implements InterfaceController{
@Override
public void DisplayInterface() {
// TODO Auto-generated method stub
System.out.println("WindowsInterfaceController...");
}
}
interface OperationSystem{
public OperationController getOperationController();
public InterfaceController getInterfaceController();
}
class Symbian implements OperationSystem{
@Override
public OperationController getOperationController() {
// TODO Auto-generated method stub
return new SymbianOperationController();
}
@Override
public InterfaceController getInterfaceController() {
// TODO Auto-generated method stub
return new SymbianInterfaceController();
}
}
class Android implements OperationSystem{
@Override
public OperationController getOperationController() {
// TODO Auto-generated method stub
return new AndroidOperationController();
}
@Override
public InterfaceController getInterfaceController() {
// TODO Auto-generated method stub
return new AndroidInterfaceController();
}
}
class Windows implements OperationSystem{
@Override
public OperationController getOperationController() {
// TODO Auto-generated method stub
return new WindowsOperationController();
}
@Override
public InterfaceController getInterfaceController() {
// TODO Auto-generated method stub
return new WindowsInterfaceController();
}
}
public class AbstractFactoryTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
OperationSystem os = new Android();
OperationController oc = os.getOperationController();
InterfaceController ic = os.getInterfaceController();
oc.DoOperation();
ic.DisplayInterface();
}
}
结果输出
AndroidOperationController...
AndroidInterfaceController...
总结
- 抽象工厂相比多态工厂减少了工厂类的数量
- 工厂要求初期设计上保证考虑周全,后期增加接口,需要修改所有工厂类