Java工厂模式分为三种
1、简单工厂模式(又叫静态工厂模式)
代码:
package simplefactory;
public interface Person {
public void say();
}
?
package simplefactory;
public class Chinese implements Person{
public void say() {
System.out.println("I am Chinese.");
}
}
?
package simplefactory;
public class Japanese implements Person {
public void say() {
System.out.println("I am Japanese.");
}
}
?
package simplefactory;
public class PersonCreator {
public Person createPerson(String type) {
if (type.equals("chn")) {
return new Chinese();
}
if (type.equals("jpn")) {
return new Japanese();
}
return null;
}
}
?
package simplefactory;
public class Test {
public static void main(String[] args) {
PersonCreator pc = new PersonCreator();
pc.createPerson("chn").say();
pc.createPerson("jpn").say();
}
}
?2、抽象工厂模式
代码:
package factorymethod
public abstract class AbstractFactory {
public abstract Person create();
}
?
package factorymethod;
public class Chinese extends Person{
public void say() {
System.out.println("I am Chinese.");
}
}
?
package factorymethod;
public class Japanese extends Person {
public void say() {
System.out.println("I am Japanese.");
}
}
?
package factorymethod;
public interface AbstractFactory {
public Person create();
}
?
package factorymethod;
public class ChineseFactory implements AbstractFactory {
public Person create() {
return new Chinese();
}
}
?
package factorymethod;
public class JapaneseFactory implements AbstractFactory {
public Person create() {
return new Japanese();
}
}
?
package factorymethod;
public class Test {
public static void main(String[] args) {
ChineseFactory cf = new ChineseFactory();
cf.create().say();
JapaneseFactory jf = new JapaneseFactory();
jf.create().say();
}
}
?3、抽象工厂模式
代码:
package abstractfactory;
public interface Person {
public void say();
}
?
package abstractfactory;
public class Chinese implements Person{
public void say() {
System.out.println("I am Chinese.");
}
}
?
package abstractfactory;
public class Japanese implements Person {
public void say() {
System.out.println("I am Japanese.");
}
}
?
package abstractfactory;
public abstract class AbstractFactory {
public abstract Chinese createChinese();
public abstract Japanese createJapanese();
}
?
package abstractfactory;
public class DefaultFactory extends AbstractFactory{
public Chinese createChinese() {
return new Chinese();
}
public Japanese createJapanese() {
return new Japanese();
}
}
?
package abstractfactory;
public class Test {
public static void main(String[] args) {
AbstractFactory af = new DefaultFactory();
af.createChinese().say();
af.createJapanese().say();
}
}
?
原文:http://zhaojian0910.iteye.com/blog/2188886