一. 概念工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际实现推迟到子类中。
二. 角色抽象工厂(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()+"在吃减肥药"); }
} 具体产品,女人类。
以上就实现了工厂方法模式。
|