内部类(五)----再访工厂方法

本文通过两个具体示例展示了工厂模式的实现方式:一是创建不同类型的简单服务接口实现;二是创建不同的游戏并进行游戏循环,直到游戏结束。这些示例演示了如何使用静态内部类和私有构造器来实现特定实例的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * Created by Panda on 2018/6/10.
 */
interface Service{
    void method1();
    void method2();
}
interface ServiceFactory{
    Service getService();
}
//Implementation1构造器是私有的
class Implementation1 implements Service{
    private Implementation1(){}
    @Override
    public void method1() {
        System.out.println("Implementation1 method1()");
    }

    @Override
    public void method2() {
        System.out.println("Implementation1 method2()");
    }

    public static ServiceFactory factory=new ServiceFactory() {
        @Override
        public Service getService() {
            return new Implementation1();
        }
    };
}

class Implementation2 implements Service{
    private Implementation2(){}
    public void method1() {
        System.out.println("Implementation2 method1()");
    }

    @Override
    public void method2() {
        System.out.println("Implementation1 method2()");
    }

    public static ServiceFactory factory=new ServiceFactory() {
        @Override
        public Service getService() {
            return new Implementation2();
        }
    };
}
public class Factories {
    public static void serviceConsumer(ServiceFactory serviceFactory){
        Service service = serviceFactory.getService();
        service.method1();
        service.method2();
    }

    public static void main(String[] args) {
        serviceConsumer(Implementation1.factory);
        serviceConsumer(Implementation2.factory);
    }
}
/**
 * Created by Panda on 2018/6/10.
 */
interface Game{boolean move();}
interface GameFactory{Game getGame();}
class Checks implements Game{
    private Checks(){}
    private int moves=0;
    private static final int MOVES=3;
    @Override
    public boolean move() {
        System.out.println("Checks move "+moves);
        return ++moves!=MOVES;
    }
    public static GameFactory factory = new GameFactory() {
        @Override
        public Game getGame() {
            return new Checks();
        }
    };
}
class Chess implements Game{
    private Chess(){}
    private int moves=0;
    private static final int MOVES=4;
    @Override
    public boolean move() {
        System.out.println("Chess move "+moves);
        return ++moves!=MOVES;
    }
    public static GameFactory factory = new GameFactory() {
        @Override
        public Game getGame() {
            return new Chess();
        }
    };
}
public class Games {
    public static void playGame(GameFactory gameFactory){
        Game game = gameFactory.getGame();
        while (game.move());
    }

    public static void main(String[] args) {
        playGame(Checks.factory);
        playGame(Chess.factory);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值