一. 概念工廠方法模式的用意是定義一個創(chuàng)建產(chǎn)品對象的工廠接口,將實(shí)際實(shí)現(xiàn)推遲到子類中。
二. 角色抽象工廠(Creator)角色:擔(dān)任這個角色的是工廠方法模式的核心,它是與應(yīng)用程序無關(guān)的。其他工廠類必須實(shí)現(xiàn)這個接口。 具體工廠(Concrete Creator)角色:擔(dān)任這個角色的是實(shí)現(xiàn)了抽象工廠接口的具體Java類。 抽象產(chǎn)品(Product)角色:工廠方法模式所創(chuàng)建的對象的超類型,也就是產(chǎn)品對象的共同父類或共同擁有的接口。 具體產(chǎn)品(Concrete Product)角色:這個角色實(shí)現(xiàn)了抽象角色所聲明的接口。
這里舉一個造人的例子,假設(shè)一個工廠能過造人,那個定義這個工廠威抽象工廠角色,而男人工廠和女人工廠便是具體工廠角色,所造出的人就是抽象產(chǎn)品角色,而具體的男人和女人就是具體產(chǎn)品角色。
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(); } 抽象產(chǎn)品,人類。
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()+"正在吃飯"); }
} 具體產(chǎn)品,女人類。
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()+"在吃減肥藥"); }
} 具體產(chǎn)品,女人類。
以上就實(shí)現(xiàn)了工廠方法模式。
|