从餐具的生产说到抽象工厂

69 阅读2分钟
  • 使用

*/

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。但是并没有具体的声明要如何生产,以及具体的产品类型。

  1. 接下来我们定义一种一次性餐具的工厂,以及一些一次性餐具

/**

  • 一次性碗

  • @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();

}

}

通过这个一次性餐具工厂我们可以生产出很多一次性的餐具。

  1. 然后我们再定义一个可回收的餐具的餐具工厂

/**

  • 可反复使用的碗

  • @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());

}

}