上一节讲了工厂模式,这一节是抽象工厂模式。
抽象工厂模式是对工厂模式的抽象,扩展工厂类别,增加产品类别,创建抽象工厂。通过工厂生成器生成相应的工厂,再生成具体产品。
package com.wms.abstractFactoryPattern;
public interface Book {
void look();
}
package com.wms.abstractFactoryPattern;
public class ShenHua implements Book {
public void look() {
System.out.println("shenhua.....");
}
}
package com.wms.abstractFactoryPattern;
public class XiaoShuo implements Book {
public void look() {
System.out.println("xiaoshuo");
}
}
package com.wms.abstractFactoryPattern;
public class KeHuan implements Book {
public void look() {
System.out.println("kehuan....");
}
}
package com.wms.abstractFactoryPattern;
public class BookFactory extends AbstractFactory{
public Car getCar(String type) {
return null;
}
public Book getBook(String type){
if (type==null)
return null;
if (type.equals("KeHuan"))
return new KeHuan();
if (type.equals("ShenHua"))
return new ShenHua();
if (type.equals("XiaoShuo"))
return new XiaoShuo();
return null;
}
}
package com.wms.abstractFactoryPattern;
public abstract class AbstractFactory {
abstract Car getCar(String type);
abstract Book getBook(String type);
}
package com.wms.abstractFactoryPattern;
public class CarFactory extends AbstractFactory {
public Car getCar(String type) {
if (type == null)
return null;
if ("BaoMa".equals(type))
return new BaoMa();
if ("BenChi".equals(type))
return new BenChi();
if ("QQ".equals(type))
return new QQ();
return null;
}
public Book getBook(String type) {
return null;
}
}
package com.wms.abstractFactoryPattern;
public class FactoryCreator {
public AbstractFactory getFactory(String type) {
if (type == null)
return null;
if (type.equals("Car"))
return new CarFactory();
if (type.equals("Book"))
return new BookFactory();
return null;
}
}
package com.wms.abstractFactoryPattern;
/**
*
* 对工厂模式进行抽象,
*
* 扩展工厂类别,提取抽象工厂,创建工厂生成器。
*/
public class Demo {
public static void main(String[] args) {
//首先获取超级工厂,用于下面生成工厂的工厂
FactoryCreator creator = new FactoryCreator();
//从超级工厂中生成汽车工厂
AbstractFactory carFactory = creator.getFactory("Car");
Car benchi = carFactory.getCar("BenChi");
benchi.run();
//从超级工厂中生成图书工厂
AbstractFactory bookfactory = creator.getFactory("Book");
Book keHuan = bookfactory.getBook("KeHuan");
keHuan.look();
}
}