- 使用
*/
void use();
/**
- 回收
*/
void recycle();
}
/**
-
碗
-
@author skyline
*/
public interface Bowl extends Tableware {}
/**
-
筷子
-
@author skyline
*/
public interface Chopsticks extends Tableware {}
/**
-
盘子
-
@author skyline
*/
public interface Plate extends Tableware {}
/**
-
餐具工厂
-
@author skyline
*/
public interface TablewareFactory {
/**
-
生产筷子
-
@param user 筷子的使用者
-
@return 筷子
*/
Chopsticks createChopsticks(String user);
/**
-
生产碗
-
@param user 碗的使用者
-
@return
*/
Bowl createBowl(String user);
/**
-
生产盘子
-
@param user 盘子的使用者
-
@return
*/
Plate createPlate(String user);
}
我们在接口定义了碗Bowl、盘子Plate、筷子Chopsticks,以及工厂需要能够生产碗createBowl、生产盘子createPlate、生产筷子createChopsticks。但是并没有具体的声明要如何生产,以及具体的产品类型。
- 接下来我们定义一种一次性餐具的工厂,以及一些一次性餐具
/**
-
一次性碗
-
@author skyline
*/
public class DisposableBowl implements Bowl{
@Override
public void use() {
System.out.println("这是一次性碗");
}
@Override
public void recycle() {
System.out.println("用完就扔掉吧");
}
}
/**
-
一次性筷子
-
@author skyline
*/
public class DisposableChopsticks implements Chopsticks{
@Override
public void use() {
System.out.println("这是一次性筷子");
}
@Override
public void recycle() {
System.out.println("用完扔掉");
}
}
/**
-
一次性的盘子
-
@author skyline
*/
public class DisposablePlate implements Plate {
@Override
public void use() {
System.out.println("这是一次性盘子");
}
@Override
public void recycle() {
System.out.println("用完扔掉吧");
}
}
/**
-
一次性餐具工厂
-
@author skyline
*/
public class DisposableTablewareFactory implements TablewareFactory {
@Override
public Chopsticks createChopsticks(String user) {
return new DisposableChopsticks();
}
@Override
public Bowl createBowl(String user) {
return new DisposableBowl();
}
@Override
public Plate createPlate(String user) {
return new DisposablePlate();
}
}
通过这个一次性餐具工厂我们可以生产出很多一次性的餐具。
- 然后我们再定义一个可回收的餐具的餐具工厂
/**
-
可反复使用的碗
-
@author skyline
*/
public class RepeatableBowl implements Bowl {
@Override
public void use() {
System.out.println("这个碗可以反复使用");
}
@Override
public void recycle() {
System.out.println("用完洗一洗");
}
}
/**
-
可反复使用的筷子
-
@author skyline
*/
public class RepeatableChopsticks implements Chopsticks {
@Override
public void use() {
System.out.println("这是可反复使用的筷子");
}
@Override
public void recycle() {
System.out.println("用完洗一洗");
}
}
/**
-
可反复使用的盘子
-
@author skyline
*/
public class RepeatablePlate implements Plate {
@Override
public void use() {
System.out.println("这是一次性盘子");
}
@Override
public void recycle() {
System.out.println("用完扔掉吧");
}
}
/**
-
可反复使用的餐具的工厂
-
@author skyline
*/
public class RepeatableTablewareFactory implements TablewareFactory {
private final ConcurrentHashMap<String, Chopsticks> chopsticksCache = new ConcurrentHashMap<>();
private final ConcurrentHashMap<String, Bowl> bowlCache = new ConcurrentHashMap<>();
private final ConcurrentHashMap<String, Plate> plateCache = new ConcurrentHashMap<>();
@Override
public Chopsticks createChopsticks(String user) {
return chopsticksCache.computeIfAbsent(user, k -> new RepeatableChopsticks());
}
@Override
public Bowl createBowl(String user) {
return bowlCache.computeIfAbsent(user, k -> new RepeatableBowl());
}
@Override
public Plate createPlate(String user) {
return plateCache.computeIfAbsent(user, k -> new RepeatablePlate());
}
}