抽象工厂模式:
1> 首先有男孩女孩:
package com.zy.factoryProject;
/**
* 男孩
*
* @author Administrator
*
*/
public interface Boy {
public void drawMan();
}
package com.zy.factoryProject;
/**
* 女孩
*
* @author Administrator
*
*/
public interface Girl {
public void drawWomen();
}
2> 当各种节日来了就会有不同系列的男孩女孩,以圣诞节和新年系列为例:( 分别继承Boy和Girl接口)
package com.zy.factoryProject;
/**
* 圣诞系列的男孩子
* @author Administrator
*
*/
public class MCBoy implements Boy {
@Override
public void drawMan() {
System.out.println("---圣诞系列的男孩子---");
}
}
package com.zy.factoryProject;
/**
* 圣诞系列的女孩子
*
* @author Administrator
*
*/
public class MCGirl implements Girl {
@Override
public void drawWomen() {
System.out.println("---圣诞系列的女孩子---");
}
}
package com.zy.factoryProject;
/**
* 新年系列的男孩子
*
* @author Administrator
*
*/
public class HNBoy implements Boy {
@Override
public void drawMan() {
System.out.println("---新年系列的男孩子---");
}
}
package com.zy.factoryProject;
/**
* 新年系列的女孩子
*
* @author Administrator
*
*/
public class HNGirl implements Girl {
@Override
public void drawWomen() {
System.out.println("新年系列的女孩子");
}
}
*现在创建好了节日系列的男孩女孩人物,需要创建一个工厂,提供给外界调用
1> 人物创建工厂:(PersonFactory.java)
package com.zy.factoryProject;
public interface PersonFactory {
// 男孩接口
public Boy getBoy();
// 女孩接口
public Girl getGirl();
}
2> 节日系列人物创建工厂,继承自人物创建工厂:(MCFactory.java)
package com.zy.factoryProject;
/**
* 圣诞系列加工厂
*
* @author Administrator
*
*/
public class MCFactory implements PersonFactory {
@Override
public Boy getBoy() {
return new MCBoy();
}
@Override
public Girl getGirl() {
return new MCGirl();
}
}
package com.zy.factoryProject;
/**
* 新年系列加工厂
*
* @author Administrator
*
*/
public class HNFactory implements PersonFactory {
@Override
public Boy getBoy() {
return new HNBoy();
}
@Override
public Girl getGirl() {
return new HNGirl();
}
}
3> 客户端调用测试:
PersonFactory pf = new MCFactory();
Girl girl = pf.getGirl();
girl.drawWomen();
工厂方法模式和抽象工厂模式的对比:
1>工厂方法模式是一种极端情况的抽象工厂模式,而抽象工厂模式可以看成 是工厂模式的推广
2>工厂方法模式用来创建一个产品的等级结构,而抽象工厂模式是用来创 建多个产品的等级结构
3>工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个抽象产品类
工厂模式常见的应用:
JDBC:
对各种数据库提供统一的访问接口,客户端决定需要那种数据库就由数据 操作工厂生产对应的数据连接.