`
第三章 策略模式在多线程中的应用
public class TicketWindow extends Thread {
private final String name;
private static final int MAX = 50;
private static int index = 1;
public TicketWindow(String name) {
this.name = name;
}
@Override
public void run() {
while (index <= MAX) {
System.out.println("柜台:" + name + "当前的号码是:" + (index++));
}
}
}
public class Bank {
public static void main(String[] args) {
TicketWindow ticketWindow1 = new TicketWindow("一号柜台");
ticketWindow1.start();
TicketWindow ticketWindow2 = new TicketWindow("二号柜台");
ticketWindow2.start();
TicketWindow ticketWindow3 = new TicketWindow("三号柜台");
ticketWindow3.start();
}
}
二、用Runnable接口将线程的逻辑执行单元从控制中抽取出来public class TicketWindowRunnable implements Runnable {
private int index = 1;
private final static int MAX = 50;
@Override
public void run() {
while (index <= MAX) {
System.out.println(Thread.currentThread() + " 的号码是:" + (index++));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class BankVersion2 {
private final static int MAX = 50;
public static void main(String[] args) {
final TicketWindowRunnable ticketWindow = new TicketWindowRunnable();
Thread windowThread1 = new Thread(ticketWindow, “一号窗口”);
Thread windowThread2 = new Thread(ticketWindow, “二号窗口”);
Thread windowThread3 = new Thread(ticketWindow, “三号窗口”);
windowThread1.start();
windowThread2.start();
windowThread3.start();
}
}
我们都知道java启动多线程有两种方式,一种是继承Thread类,一种是实现Runnable接口,但是很多小伙伴可能不知道实现Runnable接口这种方式中运用了“策略模式”这种设计模式。下面我们就一起来看看“策略模式”是如何运用在javaduo线程中的。
01
什么是“策略模式”
针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而使它们可以相互替换。
看完定义,很蒙圈
下面我们一起来看一个贴近生活的例子
02
举例子
我们去商场买衣服,在付钱的时候,我们可以选择支付宝、微信、信用卡、现金这几种付款方式,但是不管哪种付款方式,结果是一样的,都是要给那些钱。
根据不同的情况选择不同的付款方式,这其实就有些类似我们的策略模式。
下面结合定义和付钱的这个例子,我们用代码来演示一下“策略模式”
一、定义抽象策略接口
二、具体策略类
三、环境实现类



