Factory Method

Factory Method
定义一个创建对象的接口,由子类决定实例化哪一个类,工厂方法将类的实例化推迟到子类实现。
多个子类都实现各自的重写的接口的方法。
当需要使用接口方法时候,通过创建不同的子类从而实现创建不同的对象。


//定义游戏接口
interface Game {
    public void play();
}

//A游戏
class GameA implements Game{
    public void play(){System.out.println("Playing GameA");};
}

//B游戏
class GameB implements Game{
    public void play(){System.out.println("Playing GameB");};
}

//C游戏
class GameC implements Game{
    public void play(){System.out.println("Playing GameC");};
}

//定义工厂(父类)
interface GameFactory {
    Game createGame();
}

//帮忙子类,游戏A工厂
class GameAFactory implements GameFactory {
    @Override
    public Game createGame() {
        return new GameA();
    }
}

//帮忙子类,游戏B工厂
class GameBFactory implements GameFactory {
    @Override
    public Game createGame() {
        return new GameB();
    }
}

//帮忙子类,游戏C工厂
class GameCFactory implements GameFactory {
    @Override
    public Game createGame() {
        return new GameC();
    }
}

//测试者(客户)类
class Tester {
    private GameFactory gameFactory;

    public Tester(GameFactory gameFactory) {
        this.gameFactory = gameFactory;
    }

    public void testGame() {
        //通过工厂获取游戏实例
        Game game = gameFactory.createGame();
        //试玩游戏
        game.play();
    }

}

//代码测试
public class Test {
    public static void main(String[] args) {
        //要求测试者1试玩游戏A
        GameFactory gameFactory = new GameAFactory();
        Tester tester1 = new Tester(gameFactory);
        tester1.testGame();
        
         //要求测试者2也试玩游戏A
        Tester tester2 = new Tester(gameFactory);
        tester2.testGame();
        
        //... 测试者1000也试玩游戏A
    }
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-23 03:22:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 03:22:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 03:22:01       87 阅读
  4. Python语言-面向对象

    2024-02-23 03:22:01       96 阅读

热门阅读

  1. TCP协议

    TCP协议

    2024-02-23 03:22:01      40 阅读
  2. springboot使用PageHelper

    2024-02-23 03:22:01       58 阅读
  3. 分享一个治疗神经痛的药方

    2024-02-23 03:22:01       47 阅读
  4. python子域名收集工具

    2024-02-23 03:22:01       47 阅读
  5. QT TCP通讯客户端与服务端

    2024-02-23 03:22:01       51 阅读
  6. PTA笔记

    2024-02-23 03:22:01       55 阅读
  7. Python系列(19)—— 条件语句

    2024-02-23 03:22:01       44 阅读
  8. HTTP多路复用

    2024-02-23 03:22:01       46 阅读
  9. CSS学习

    2024-02-23 03:22:01       54 阅读
  10. Qt之Qstring

    2024-02-23 03:22:01       45 阅读