本文旨在Spring boot入门,通过基本的操作与了解相关知识让我们大概了解spingboot框架
目录
(一)在Idea上创建基于Spring Boot的web 项目
(二)Spring Boot 开发入门--- RESTful 接口的 Web服务
(一)在Idea上创建基于Spring Boot的web 项目
当客户端浏览器访问该web资源时,返回的网页显示 “helloword Spring Boot!这是一个用Spring Boot开发的网站。”
1.首先创建一个一个新项目

2.选择Java对应版本,next

3.选择web中的spring web,然后next
4.自定义项目名字,然后finish
5.在创建的包下创建controller包,在里面又创建controller类

6.controller中输入代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/hello")
public class controller {
@GetMapping
public String hello()
{
return "hello";
}
}
7.运行编译
最后在浏览器在http://localhost:8080/hello 可以访问输出hello
(二)Spring Boot 开发入门--- RESTful 接口的 Web服务
1.初步了解HTTP协议,掌握B/S之间的 请求Request、服务响应Response和get、put、post等主要概念和技术方法,在这里就不过多赘述,自行学习。以下参考博客
2.1.RESTful接口与http协议状态表述 · 手摸手教你学spring boot 2.x(持续更新) · 看云
2.创建新项目


2.创建完成后在包里创建如下文件
3.最后在此编译

编译成功!代码部署完毕。此文代码出处
【SpringBoot】使用IDEA创建一个SpringBoot服务,并创建三个restful风格的接口 - 微弦 - 博客园
4.现在来测试一下
(三)软件设计模式的学习(以Java为例)
1.单例模型
概念:
java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {
private Singleton() {}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
饿汉式单例
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
登记式单例
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
2.工厂模式
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。
其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。
工厂方法模式:工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
设计模式分为三大类:创建型、结构型、行为型。创建型模式处理的是对象的创建过程(通过各种方式创建对象,使对象创建和管理变得简单),结构型模式处理的是对象/类的组合,行为型模式处理类和对象间的交互方式和任务分布。(只有类可以创建对象,接口只能被实现)
1.简单工厂模型
3.简单工厂模式:
实例化对象的时候不再使用 new Object()形式,可以根据用户的选择条件来实例化相关的类。对于客户端来说,去除了具体的类的依赖。只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象。
具体实现例子,定义一个接口
public interface Operation {
public double getResult(double numberA,double numberB) throws Exception;
}
定义操作类
public class Add implements Operation{
// 加法计算
public double getResult(double numberA, double numberB) {
return numberA + numberB;
}
}
public class Sub implements Operation{
// 减法计算
public double getResult(double numberA, double numberB) {
return numberA-numberB;
}
}
public class Mul implements Operation{
// 乘法计算
public double getResult(double numberA, double numberB) {
return numberA * numberB;
}
}
public class Div implements Operation {
// 除法计算
public double getResult(double numberA, double numberB) throws Exception {
if (numberB == 0) {
throw new Exception("除数不能为0!");
}
return numberA / numberB;
}
}
定义简单工厂类
public class EasyFactory {
// 简单工厂,根据字符串创建相应的对象
public static Operation createOperation(String name) {
Operation operationObj = null;
switch (name) {
case "+":
operationObj = new Add();
break;
case "-":
operationObj = new Sub();
break;
case "*":
operationObj = new Mul();
break;
case "/":
operationObj = new Div();
break;
}
return operationObj;
}
}
用户端代码
public class Client {
public static void main(String[] args) throws Exception {
Operation add = EasyFactory.createOperation("+");
Operation sub = EasyFactory.createOperation("-");
Operation mul = EasyFactory.createOperation("*");
Operation div = EasyFactory.createOperation("/");
System.out.println(add.getResult(1, 1));
System.out.println(sub.getResult(1, 1));
System.out.println(mul.getResult(1, 1));
System.out.println(div.getResult(1, 1));
}
}
结果
2.0
0.0
1.0
1.0
2.工厂方法模型
这时候就需要使用工厂模式了。工厂方法模式是对简单工厂模式进一步的解耦,因为在工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。
具体实现
定义一个工厂接口
import org.zero01.operation.Operation;
public interface Factory {
public Operation createOperation() ;
}
定义具体工厂类
// 加法类工厂
public class AddFactory implements Factory{
public Operation createOperation() {
System.out.println("加法运算");
return new Add();
}
}
// 减法类工厂
public class SubFactory implements Factory{
public Operation createOperation() {
System.out.println("减法运算");
return new Sub();
}
}
........
客户端源代码
public class Client {
public static void main(String[] args) throws Exception {
// 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的
Factory addFactory = (Factory) Class.forName("org.zero01.factory.AddFactory").newInstance();
Factory subFactory=(Factory) Class.forName("org.zero01.factory.SubFactory").newInstance();
// 通过工厂对象创建相应的实例对象
Operation add = addFactory.createOperation();
Operation sub = subFactory.createOperation();
System.out.println(add.getResult(1, 1));
System.out.println(sub.getResult(1, 1));
}
}
工厂模式中,要增加产品类时也要相应地增加工厂类,客户端的代码也增加了不少。工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行。
你想要加功能,本来是改工厂类的,而现在是修改客户端。而且各个不同功能的实例对象的创建代码,也没有耦合在同一个工厂类里,这也是工厂方法模式对简单工厂模式解耦的一个体现。工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程的优点。
但工厂方法模式的缺点是每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量。
3.抽象工厂模式
我们现在有一个需求:有两个农场,第一个农场用于养牛和种菜,第二个农场用于养马和种水果。经过分析我们生产的产品为不同的类型,工厂方法模式只能完成同一系列产品的生产,而如果需要生产不同系列的产品,则需要我们使用抽象工厂模式
具体实现
/**
* @author hz
* @version 1.0
*/
public class FarmTest {
public static void main(String[] args) {
try {
Farm f;
Animal a;
Plant p;
//读取相应的配置信息,用于生产工厂
f = (Farm) ReadXML.getObject();
a = f.newAnimal();
p = f.newPlant();
a.show();
p.show();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
//抽象产品:动物类
interface Animal {
public void show();
}
//具体产品:马类
class Horse implements Animal {
public Horse() {
System.out.println("具体马类的生成");
}
public void show() {
System.out.println("执行马类的相应操作");
}
}
//具体产品:牛类
class Cattle implements Animal {
public Cattle() {
//具体牛类的生成
System.out.println("具体牛类的生成");
}
public void show() {
System.out.println("执行马类的相应操作");
}
}
//抽象产品:植物类
interface Plant {
public void show();
}
//具体产品:水果类
class Fruitage implements Plant {
public Fruitage() {
System.out.println("具体水果类生成");
}
public void show() {
System.out.println("执行水果类的相应操作");
}
}
//具体产品:蔬菜类
class Vegetables implements Plant {
public Vegetables() {
System.out.println("具体蔬菜类生成");
}
public void show() {
System.out.println("执行蔬菜类的相应操作");
}
}
//抽象工厂:农场类
interface Farm {
public Animal newAnimal();
public Plant newPlant();
}
//具体工厂:农场类1
class SGfarm implements Farm {
public Animal newAnimal() {
System.out.println("新牛出生!");
return new Cattle();
}
public Plant newPlant() {
System.out.println("蔬菜长成!");
return new Vegetables();
}
}
//具体工厂:农场类2
class SRfarm implements Farm {
public Animal newAnimal() {
System.out.println("新马出生!");
return new Horse();
}
public Plant newPlant() {
System.out.println("水果长成!");
return new Fruitage();
}
}
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.File;
/**
* @author hz
* @version 1.0
*/
public class ReadXML2 {
public static Object getObject() {
try {
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("src/AbstractFactory/config.xml"));
NodeList nl = doc.getElementsByTagName("className");
Node classNode = nl.item(0).getFirstChild();
String cName = "AbstractFactory." + classNode.getNodeValue();
System.out.println("新类名:" + cName);
Class<?> c = Class.forName(cName);
Object obj = c.newInstance();
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
- 优点
- 1.可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
- 2.当需要产品族时,抽象工厂可以保证客户端始终只使用同一个产品的产品组。
- 3.抽象工厂增强了程序的可扩展性,当增加一个新的产品族时,不需要修改原代码,满足开闭原则。
缺点:
当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。增加了系统的抽象性和理解难度。
根据以上对抽象工厂模式的分析,我们可以知道抽象工厂模式通常适用于以下场景:
- 当需要创建的对象是一系列相互关联或相互依赖的产品族时,如电器工厂中的电视机、洗衣机、空调等。
- 系统中有多个产品族,但每次只使用其中的某一族产品。如有人只喜欢穿某一个品牌的衣服和鞋。
- 系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构。
参考 简单工厂模式、工厂模式以及抽象工厂模式(具体)_cosmos_lee-CSDN博客_简单工厂模式和工厂模式
https://segmentfault.com/a/1190000040319351
总结
通过对简单spring boot 的web实例开发,以及对RESTful 接口的 Web服务的学习,还有学习对软件设计模式的学习,让我打开一扇新的大门,收获很多,其中遇到许多问题,但是通过自己的查阅资料也能解决,提高自学能力。
本文从SpringBoot项目创建入手,介绍了如何搭建基于SpringBoot的Web应用并实现RESTful接口服务。此外,还深入探讨了单例、工厂及抽象工厂等经典设计模式,通过实例演示了它们在Java中的应用。

2万+

被折叠的 条评论
为什么被折叠?



