单态模式其他模式

Posted zhuxudong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单态模式其他模式相关的知识,希望对你有一定的参考价值。

单态模式

public class MonoState {
    /**
     * MonoState pattern【单态模式】
     * all instances of the class will have the same state
     * 此类的所有实例都具有相同的状态,可以作为单例模式的替代者。
     * Enforces a behavior like sharing the same state amongst all instances.
     * 强制在所有实例中执行共享相同状态的行为。
     */
    @Test
    public void all() {
        final LoadBalancer lb1 = new LoadBalancer();
        final LoadBalancer lb2 = new LoadBalancer();
        lb1.service(StringRequest.of("hello"));
        lb2.service(StringRequest.of("world"));
    }
}

interface Request<T> {
    T body();
}
interface Server<T> {
    void service(Request<T> request);
}
@Value(staticConstructor = "of")
class StringRequest implements Request<String> {
    private final String body;
    @Override
    public String body() {
        return body;
    }
}
@Value(staticConstructor = "of")
@Slf4j
class StringServer implements Server<String> {
    private String host;
    private int port;
    @Override
    public void service(Request<String> request) {
        log.info("{} handle request {}", toString(), request.body());
    }
}

class LoadBalancer {
    private static final List<Server<String>> servers = Lists.newArrayList();
    private static int lastServerId;

    static {
        servers.add(StringServer.of("localhost", 1));
        servers.add(StringServer.of("localhost", 2));
        servers.add(StringServer.of("localhost", 3));
    }

    public void service(Request<String> request) {
        Optional.ofNullable(getServer()).ifPresent(server -> server.service(request));
    }

    private Server<String> getServer() {
        if (++lastServerId >= servers.size()) {
            lastServerId = 0;
        }
        return servers.get(lastServerId);
    }
}

以上是关于单态模式其他模式的主要内容,如果未能解决你的问题,请参考以下文章

java中单态模式或单例模式(Singleton)有什么意义?

Spring 实现两种设计模式:工厂模式和单态模式

单态(单例)设计模式

单态(单例)设计模式

PHP 对象 单态(单例,单件)设计模式 static

给出一个SQLServer DataSource 数据源单态模式的例子?