package com.cheng.zenofdesignpatterns.patternpk.behavioral.observer_vs_chain.chain; import java.util.Random; /** * 抽象域名服务器 */ public abstract class ChainDnsServer { // 上级DNS是谁 private ChainDnsServer upperServer; // 解析域名 public final Recorder resolve(String domain) { Recorder recorder = null; if (isLocal(domain)) { // 是本服能解析的域名 recorder = echo(domain); } else { // 本服不能解析 // 提交上级DNS进行解析 recorder = upperServer.resolve(domain); } return recorder; } // 指向上级DNS public void setUpperServer(ChainDnsServer _upperServer) { this.upperServer = _upperServer; } // 每个DNS都有一个DNS的数据处理区(ZONE),检查域名是否在本zone中 protected abstract boolean isLocal(String domain); // 每个DNS服务器都必须实现解析任务 protected Recorder echo(String domain) { Recorder recorder = new Recorder(); //获得IP地址 recorder.setIp(genIpAddress()); recorder.setDomain(domain); return recorder; } // 随机产生一个IP地址,工具类 protected String genIpAddress() { Random rand = new Random(); String address = rand.nextInt(255) + "." + rand.nextInt(255) + "." + rand.nextInt(255) + "." + rand.nextInt(255); return address; } }