三 抽象工厂模式

抽象工厂模式

定义:

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

例如:以上一章节的例子为例。假如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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值