您的位置:首页 > 其它

三 抽象工厂模式

2016-04-26 21:32 363 查看

抽象工厂模式

定义:

抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定类实例的具体类型的情况下,能够创建多个类实例族的类实例对象。


例如:以上一章节的例子为例。假如Apple又分为Apple1和Apple2,Banana也分为Banana1和Banana2。我们希望对每类水果的每种类型区分, 并可以创建多个水果实例。此时,便可以考虑抽象工厂模式,即:对类实例进一步抽象,对每一种类实例族进行创建。

抽象工厂角色:

public interface FruitFactory {
//实例化Apple
public Fruit getApple();
//实例化Banana
public Fruit getBanana();
}


抽象角色

其中包括公共的抽象角色和具体类的进一步抽象。

public interface Fruit {
public void get();
}


public abstract class Apple implements Fruit{
public abstract void get();
}


public abstract class Banana implements Fruit{
public abstract void get();
}


具体工厂角色

public class Fruit1Factory implements FruitFactory {
public Fruit getApple() {
return new Apple1();
}

public Fruit getBanana() {
return new Banana1();
}
}


public class Fruit2Factory implements FruitFactory {
public Fruit getApple() {
return new Apple2();
}

public Fruit getBanana() {
return new Banana2();
}
}


具体类实例

public class Apple1 extends Apple {
public void get() {
System.out.println("Apple1");
}
}


public class Banana1 extends Banana {
public void get() {
System.out.println("Banana1");
}
}


public class Apple2 extends Apple {
public void get() {
System.out.println("Apple2");
}
}


public class Banana2 extends Banana {
public void get() {
System.out.println("Banana2");
}
}


调用如下:

public class MainClass {
public static void main(String[] args) {
FruitFactory ff = new Fruit1Factory();
Fruit apple = ff.getApple();
apple.get();

Fruit banana = ff.getBanana();
banana.get();

FruitFactory ff2= new Fruit2Factory();
Fruit apple2 = ff2.getApple();
apple2.get();

Fruit banana2 = ff2.getBanana();
banana2.get();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息