50行代码实现网站服务器3

简介: 50行代码实现网站服务器3

在上一讲我们针对需求提出了一种新的解决方案,经过分析我们发现这种方法虽然在某种程度上改善了代码的结构,但是本质上只是一种任务的转移,并未解决问题。本讲我们将提出一种新的解决方案。

 

1 问题描述

对于之前的网站服务器,我们想要在启动之前打印"some operations before server start!",在服务器销毁之前打印"some operations before server destroy!"

 

2 问题分析

上一讲提出的解决方案本质问题在于需求改变时,需要不停的去修改WebServerAction类,这严重的违反了开闭原则。

我们希望达到的效果是,当需求改变时,我们希望实现现有的接口或继承现有的类或增加新的类来达到目的。

为了实现该目标,我们提出下面新的解决方案。

 

1) 设计新的接口ServerListener,该接口具有两个方法,分别是服务器启动和销毁时对应的操作。

public interface ServerListener {

  public void start();

  public void destroy();

}

 

2)第一个需求来临时,实现该接口。

public class OneServerListener implements ServerListener {

 

  @Override

  public void start() {

       System.out.println("> This is operation 1 before server start!");

  }

 

  @Override

  public void destroy() {

       System.out.println("> This is operation 1 before server destroy!");

 

  }

}

 

3)WebServer增加成员变量List<ServerListener>,并做初始化操作。

privateList<ServerListener> serverListenerList;

 

  WebServer() throws IOException {

 

       serverSocket = newServerSocket(WebConfig.SERVER_PORT);

       serverListenerList= new ArrayList<ServerListener>();

  }

 

4) run方法开始和结束前,执行所有实现了ServerListener接口的方法。

public void run() throwsIOException {

       for (ServerListener listener : serverListenerList)

           listener.start();

 

       // ...

       for (ServerListener listener:serverListenerList)

           listener.destroy();

  }

 

5) 初始化WebServer时,添加所有的ServerListener

WebServer webServer = new WebServer();

webServer.addListener(newOneServerListener());

webServer.run();

6) 当有新的需求时,我们需要做的工作是:

- 实现ServerListener接口,完成新的需求;

- webserver初始化的时候,调用addListener方法。

 

3 总结

本讲针对上一讲提出的问题,经过细致分析,发现问题并提出了一种新的解决方案,该方案能够较好的应对需求的变化,符合面向对象的设计原则-开闭原则。为了更好的适应需求变化,后面我们可以将listener的信息在配置文件中进行配置。

目录
相关文章
|
1月前
|
固态存储 安全 程序员
搭建程序员个人博客网站的服务器配置怎么选?
搭建个人博客网站时,合理选择服务器配置至关重要。推荐1核CPU、2GiB内存、SSD硬盘及2M-10M带宽,适合大多数个人博客。操作系统方面,Linux更为经济高效。建议选择如阿里云等知名云服务商,同时考虑服务器的可扩展性和安全性,确保网站稳定运行与良好体验。
|
1月前
|
运维 安全 Linux
怎么使用云服务器搭建个人博客网站
使用云服务器搭建个人博客网站是一个涉及多个步骤的过程,包括购买云服务器、域名注册和备案、环境配置、安装博客系统、部署SSL证书以及网站上线和维护。通过选择合适的云服务提供商(如阿里云、腾讯云等),配置服务器,安装宝塔面板,选择合适的博客程序(如Typecho、WordPress等),并确保安全措施到位,您可以成功搭建并运行自己的个人博客网站。
|
1月前
|
弹性计算 负载均衡 算法
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
负载均衡如何帮助阿里云国际服务器搭建的网站或应用程序?
|
1月前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
1月前
|
弹性计算 关系型数据库 MySQL
CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站
CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站
|
1月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
26 0
|
1月前
|
存储 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统网站服务器,该服务器上部署了几十个网站,使用一块SATA硬盘。 服务器故障&原因: 服务器在工作过程中突然宕机。管理员尝试重新启动服务器失败,于是将服务器上的硬盘拆下检测,发现很多坏扇区。联系当地的一家数据恢复公司处理,但是没有成功。
|
2月前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
3月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
29 0
|
4月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
217 1