Неважно, какой дизайн вы выберете. Это действительно зависит от вас. Единственное, о чем вы должны заботиться - избегать одновременной записи двух потоков в один и тот же поток. Таким образом, вы можете создать свой собственный слой, который синхронизируется и используется несколькими потоками. В качестве альтернативы вы можете создать синхронизированный выходной поток и передать его всем потокам. Это, вероятно, лучший подход: в этом случае каждый поток просто знает, что записать в поток. Единственный слой, который знает, что поток синхронизирован, - это фабрика, которая его создает.