二. 角色工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际实现推迟到子类中。
抽象工厂(Creator)角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。其他工厂类必须实现这个接口。具体工厂(Concrete Creator)角色:担任这个角色的是实现了抽象工厂接口的具体Java类。抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。具体产品(Concrete Product)角色:这个角色实现了抽象角色所声明的接口。
三. 实现
这里举一个造人的例子,假设一个工厂能过造人,那个定义这个工厂威抽象工厂角色,而男人工厂和女人工厂便是具体工厂角色,所造出的人就是抽象产品角色,而具体的男人和女人就是具体产品角色。Test.javapublic 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.javapublic interface HumanFactory {public Human create(String name);}抽象工厂。FemaleFactory.javapublic class FemaleFactory implements HumanFactory {@Overridepublic Human create(String name) {return new Female(name);}}具体工厂之女人工厂。MaleFactory.javapublic class MaleFactory implements HumanFactory {@Overridepublic Human create(String name) {return new Male(name);}}具体工厂之男人工厂。Human.javapublic abstract class Human {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public abstract void eat();}抽象产品,人类。Human.javapublic class Female extends Human {public Female(){}public Female(String name){super.setName(name);}@Overridepublic void eat() {System.out.println("小伙"+super.getName()+"正在吃饭");}}具体产品,女人类。Male.javapublic class Male extends Human {public Male(){}public Male(String name){super.setName(name);}@Overridepublic void eat() {System.out.println("美女"+super.getName()+"在吃减肥药");}}具体产品,女人类。以上就实现了工厂方法模式。
联系客服