您的位置:首页 > 其它

设计模式之工厂方法

2017-05-06 15:46 169 查看
描述:女娲造人是个很经典的工厂方法模式的例子,女娲造出来的人分为白种人,黑种人及黄种人,暂时不考虑性别,语言分别分为英语,拉丁语和汉语。那么,这里我们将造人的仓库就作为生产工厂,不同肤色的人为产品。女娲造人的仓库具体的实现由仓库的子类(造人仓库)去实现

UML模型如下所示:



具体代码:
1、产品的抽象接口

package com.java.factorymethod;

public interface Human {
public void color();
public void talk();
}
package com.java.factorymethod;

public interface Human {
public void color();
public void talk();
}


2、产品的具体实现,女娲要造的三种肤色,黄种人,白种人和黑种人

package com.java.factorymethod;

public class BlackHuman implements Human {

@Override
public void color() {
System.out.println("我是黑种人!");
}

@Override
public void talk() {
System.out.println("我的语言拉丁文语!");
}

}

package com.java.factorymethod;

public class WhiteHuman implements Human {

@Override
public void color() {
System.out.println("我是白种人!");
}

@Override
public void talk() {
System.out.println("我的语言是英语!");
}

}

package com.java.factorymethod;

public class YellowHuman implements Human {

@Override
public void color() {
System.out.println("我是黄种人!");
}

@Override
public void talk() {
System.out.println("我的语言是汉语!");
}

}


3、工厂的抽象类

package com.java.factorymethod;

public abstract class AbstractHumanFactory {
public abstract <T extends Object> T createHuman(Class<T> obj);
}


4、具体造人的工厂类

package com.java.factorymethod;

public class HumanFactory extends AbstractHumanFactory {

@SuppressWarnings("unchecked")
@Override
public <T> T createHuman(Class<T> obj) {
T human = null;
try {
human = (T)Class.forName(obj.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return human;
}
}


5、女娲开始测试造人

package com.java.factorymethod;

public class FactoryMethodTest {

public static void main(String[] args) {

AbstractHumanFactory factory = new HumanFactory();
//黄种人
Human yellow = (YellowHuman)factory.createHuman(YellowHuman.class);
yellow.color();
yellow.talk();

//白种人
Human white = (WhiteHuman)factory.createHuman(WhiteHuman.class);
white.color();
white.talk();

//黑种人
Human black = (BlackHuman)factory.createHuman(BlackHuman.class);
black.color();
black.talk();
}

}


6、女娲造人结果:

我是黄种人!

我的语言是汉语!

我是白种人!

我的语言是英语!

我是黑种人!

我的语言拉丁文语!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: