工厂模式是在实际应用中采用的模式.所谓工厂模式,在形式上就是代替了我们平时所使用的New操作,把由New生成对象的操作交由工厂完成,这样做的最大好处是达到上层应用和下层具体实现解耦的目的.
实例:
/**
* yangxh_520@yahoo.com.cn
* @author mymy5
* 2007.09.18
*/
(1)抽象类AbstactClassTest
package cn.yxh.shejimoshi.factory;
public abstract class AbstactClassTest {
public void printSomething(){};//抽象方法,打印什么
}
(2)抽象类的实现类AbstactClassTestImpl
package cn.yxh.shejimoshi.factory;
public class AbstactClassTestImpl extends AbstactClassTest {
public void printSomething(){ //实现抽象类的抽象方法
System.out.println("工厂模式--抽象方法实现类打印!");
};
}
(3)抽象工厂InterfaceTest ,用来生成具体的工厂
package cn.yxh.shejimoshi.factory;
public interface InterfaceTest {
public AbstactClassTest instance(); //抽象方法
}
(4)工厂的具体实现类InterfaceTestImple
package cn.yxh.shejimoshi.factory;
public class InterfaceTestImple implements InterfaceTest {
public AbstactClassTest instance() { //抽象方法的实现,负责对象的生成
return new AbstactClassTestImpl();
}
}
(4)测试类Test
package cn.yxh.shejimoshi.factory;
public class Test {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
InterfaceTest i = new InterfaceTestImple(); //生成工厂
AbstactClassTest a= i.instance(); //工厂生成对象
a.printSomething();
Class c = Class.forName("cn.yxh.shejimoshi.factory.AbstactClassTestImpl"); //生成对象的其他方法
System.out.println(c.getName());
AbstactClassTestImpl asd = (AbstactClassTestImpl)c.newInstance(); //使用class的newInstance来生成方法
asd.printSomething();
}
}
先生成工厂,用工厂生成对象,用到的始终是对象的抽象类,当改写下层实现时不影响上层使用,