抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
package org.fanzone.pattern.abstractFactory;
/**
* Title: base<br>
* Description: OS<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 4, 2011 2:20:46 PM <br>
* @author wangmeng
*/
public interface OS {
/***
* Produce OS
*/
void produce();
}
----------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
/**
* Title: base<br>
* Description: OS Producer<br>
* Copyright: Copyright (c) 2011 <br>
* Create DateTime: Jul 4, 2011 11:12:05 AM <br>
* @author wangmeng
*/
public interface OSFactory {
/***
* The factory which makes OS.
* @return OS
*/
OS makeOS();
}
---------------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
public class Android implements OS {
public void produce() {
System.out.println("Android OS is being made ...");
}
}
---------------------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
public class IOS implements OS{
public void produce() {
System.out.println("iOS is being made ...");
}
}
----------------------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
public class AndroidFactory implements OSFactory {
public OS makeOS() {
return new Android();
}
}
---------------------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
public class IOSFactory implements OSFactory{
public OS makeOS() {
return new IOS();
}
}
----------------------------------------------------------------------------------
package org.mars.pattern.abstractFactory;
public class Commission {
public static void main(String[] args){
/** Factory */
AndroidFactory androidFactory = new AndroidFactory();
IOSFactory iosFactory = new IOSFactory();
/** Worker */
OS android = androidFactory.makeOS();
OS ios = iosFactory.makeOS();
/** Action */
android.produce();
ios.produce();
}
}