分享

7.2 工厂方法模式

 黎可图书馆 2013-09-05
一. 概念
工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际实现推迟到子类中。

二. 角色
抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。其他工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java类。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。
具体产品(Concrete Product)角色:这个角色实现了抽象角色所声明的接口。

三. 实现
这里举一个造人的例子,假设一个工厂能过造人,那个定义这个工厂威抽象工厂角色,而男人工厂和女人工厂便是具体工厂角色,所造出的人就是抽象产品角色,而具体的男人和女人就是具体产品角色。

Test.java
public class Test {
public static void main(String[] args) {
HumanFactory maleFactory = new MaleFactory();
HumanFactory femaleFactory = new FemaleFactory();
Human xiaohong = femaleFactory.create("小红");
Human like = maleFactory.create("黎可");
xiaohong.eat();
like.eat();
}
}
测试类先行。

HumanFactory.java
public interface HumanFactory {
public Human create(String name);
}
抽象工厂。

FemaleFactory.java
public class FemaleFactory implements HumanFactory {

@Override
public Human create(String name) {
return new Female(name);
}

}
具体工厂之女人工厂。

MaleFactory.java
public class MaleFactory implements HumanFactory {

@Override
public Human create(String name) {
return new Male(name);
}

}
具体工厂之男人工厂。

Human.java
public abstract class Human {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract void eat();
}
抽象产品,人类。

Human.java
public class Female extends Human {
public Female(){
}
public Female(String name){
super.setName(name);
}
@Override
public void eat() {
System.out.println("小伙"+super.getName()+"正在吃饭");
}

}
具体产品,女人类。

Male.java
public class Male extends Human {
public Male(){
}
public Male(String name){
super.setName(name);
}
@Override
public void eat() {
System.out.println("美女"+super.getName()+"在吃减肥药");
}

}
具体产品,女人类。

以上就实现了工厂方法模式。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多