Java代码
// DAO工厂
abstract class DaoFactory {
public static DaoFactory getInstance(String classname) {
DaoFactory dao = null;
try {
dao = (DaoFactory) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return dao;
}
abstract IuserDao getuserdao();
abstract IroleDao getroledao();
}
// Oralce工厂
class OracleFactory extends DaoFactory {
public IroleDao getroledao() {
return new OracleroleDao();
}
public IuserDao getuserdao() {
return new OracleuserDao();
}
}
// MySql工厂
class MysqlFactory extends DaoFactory {
public IroleDao getroledao() {
return new MySqlroleDAO();
}
public IuserDao getuserdao() {
return new MySqluserDao();
}
}
// DAO工厂
abstract class DaoFactory {
public static DaoFactory getInstance(String classname) {
DaoFactory dao = null;
try {
dao = (DaoFactory) Class.forName(classname).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return dao;
}
abstract IuserDao getuserdao();
abstract IroleDao getroledao();
}
// Oralce工厂
class OracleFactory extends DaoFactory {
public IroleDao getroledao() {
return new OracleroleDao();
}
public IuserDao getuserdao() {
return new OracleuserDao();
}
}
// MySql工厂
class MysqlFactory extends DaoFactory {
public IroleDao getroledao() {
return new MySqlroleDAO();
}
public IuserDao getuserdao() {
return new MySqluserDao();
}
}
4. 定义配置文件
Java代码
class Config {
// Oralce
static final String ORALCE = "org.abc.OracleFactory";
static final String MYSQL = "org.abc.MysqlFactory";
}
class Config {
// Oralce
static final String ORALCE = "org.abc.OracleFactory";
static final String MYSQL = "org.abc.MysqlFactory";
}
配置文件可以定义到XML中去(好处:修改配置项之后不需要对JAVA文件进行编译.)
5.测试你的输出的DAO
Java代码
public class Dao {
public static void main(String[] args) {
DaoFactory.getInstance(Config.ORALCE).getroledao().insert();
DaoFactory.getInstance(Config.MYSQL).getroledao().insert();
}
}
public class Dao {
public static void main(String[] args) {
DaoFactory.getInstance(Config.ORALCE).getroledao().insert();
DaoFactory.getInstance(Config.MYSQL).getroledao().insert();
}
这是一个交通工具工厂抽象类:
package Factory;
public abstract class VehicleFactory {
abstract Moveable create();
}
这是一个接口,表示run的方式:
public interface Moveable {
void run();
}
这是一个汽车工厂类,专门生产汽车,实现了交通工具工厂类:
package Factory;
public class CarFactory extends VehicleFactory{
public Moveable create() {
return new Car();
}
}
这是一个飞机工厂类,专门生产飞机,也实现了交通工具工厂类:
package Factory;
public class PlaneFactory extends VehicleFactory{
public Moveable create() {
return new Plane();
}
}
这是一个汽车类:
package Factory;
public class Car implements Moveable{
public void run() {
System.out.println("工厂为您造的汽车,正在行驶中....");
}
}
这是一个飞机类:
package Factory;
public class Plane implements Moveable {
public void run() {
System.out.println("工厂帮您创造了一架飞机,正在航行中....");
}
}
这是测试类:
package Factory;
public class Test {
public static void main(String[] args) {
VehicleFactory factory = new CarFactory();
Moveable m = factory.create();
m.run();
}
}
当我们使用飞机的工厂初始化交通工具工厂时,就会创建一个飞机对象,就会按照飞机的方式来执行run()方法,
否则就按照汽车的方式来执行run()方法!!
有一点这个意思,工厂可以帮你创建,但是感觉运用更多的是多态,你传什么工厂就能帮你创建什么工具!!这个代码还是写的简单了一点!!作者: 刘笑 时间: 2012-6-15 21:47
interface AbstractFactory {
public Draw CreateLine();
public Draw CreateDot();
}
//抽象工厂1
class ConcreteFactory1 implements AbstractFactory {
public Draw CreateLine() {
return new Line1();
}
public Draw CreateDot() {
return new Dot1();
}
}
//抽象工厂2
class ConcreteFactory2 implements AbstractFactory {
public Draw CreateLine() {
return new Line2();
}
public Draw CreateDot() {
return new Dot2();
}
}
//产品A抽象类
public abstract class Line implements Draw {
public abstract void drawing();
}
//产品B抽象类
public abstract class Dot implements Draw {
public abstract void drawing();
}
//产品接口
interface Draw {
public void drawing();
}
//产品A1类继承产品A抽象类
public class Line1 extends Line{
public void drawing() {
//画线1
System.out.println("画线1");
}
}
//产品A2类继承产品A抽象类
public class Line2 extends Line{
public void drawing() {
//画线2
System.out.println("画线2");
}
}
//产品B1类继承产品B抽象类
public class Dot1 extends Dot {
public void drawing() {
//画点1
System.out.println("画点1");
}
}
//产品B2类继承产品B抽象类
public class Dot2 extends Dot{
public void drawing() {
//画点2
System.out.println("画点2");
}
}
//客户端测试类
public class test {
public static void main(String args[]) {
AbstractFactory a = new ConcreteFactory1 ();
Draw Line1 = a.CreateLine();
Line1.drawing();
Draw Dot1 = a.CreateDot();
Dot1.drawing();
AbstractFactory aa = new ConcreteFactory2 ();
Draw Line2 = aa.CreateLine();
Line2.drawing();
Draw Dot2 = aa.CreateDot();
Dot2.drawing();
}
}