抽象工厂模式浅解

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
如何解决:在一个产品族里面,定义多个产品。
关键代码:在一个工厂里聚合多个同类产品。

什么是产品族?举个栗子,CF,LOL是腾讯游戏,腾讯就是一个产品族,而荒野行动,阴阳师是网易游戏,网易也是一个产品族。
为什么使用抽象工厂?你想想,如果用之前才抽象工厂模式,CF和荒野行动属于FPS类。LOL和阴阳师属于MOBA类,我们需要定义CF工厂,LOL工厂,荒野行动工厂,阴阳师工厂,极为的不方便,类太多,容易增加系统的复杂度。
那么直接上代码吧!

public interface FpsGame {
    public void showFpsGameMsg();
}
public interface MobaGame {
    public void showMobaGameMsg();
}
public class CF implements FpsGame{
    @Override
    public void showFpsGameMsg() {
        System.out.println("穿越火线");
    }
}
public class HYXD implements FpsGame{
    @Override
    public void showFpsGameMsg() {
        System.out.println("荒野行动");
    }
}
public class LOL implements MobaGame{
    @Override
    public void showMobaGameMsg() {
        System.out.println("英雄联盟");
    }
}
public class YYS implements MobaGame{
    @Override
    public void showMobaGameMsg() {
        System.out.println("阴阳师");
    }
}
public abstract class GameFactory {
    public FpsGame createFpsGame(){
        return null;
    }
    public MobaGame createMobaGame(){
        return null;
    }
}
public class NeteaseGameFactory extends GameFactory{
    @Override
    public FpsGame createFpsGame() {
        return new HYXD();
    }

    @Override
    public MobaGame createMobaGame() {
        return new YYS();
    }
}
public class TenCentGameFactory extends GameFactory{
    @Override
    public FpsGame createFpsGame() {
        return new CF();
    }

    @Override
    public MobaGame createMobaGame() {
        return new LOL();
    }
}
public class Main {
    public static void main(String[] args) throws SocketException, InterruptedException {
      GameFactory gameFactory=new NeteaseGameFactory();
      gameFactory.createFpsGame().showFpsGameMsg();
    }
}

这里个人有一个小小的问题,王者荣耀和LOL都是MOBA游戏,都是腾讯的,那工厂又怎么实现呢?这个问题留在后面解决。另外文章有什么问题呢?(反正我个人感觉栗子不好吃)请各位提出来,相互交流学习改进!谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值