软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的复用性。
什么是工厂设计模式?
我们之前创建对象都是自己手动new出来的,那能不能让一个工厂帮我们造出来,然后我们直接拿来用就行。(使用new的方式创建对象会增加耦合度,无论使用什么框架, 都要减少new的使用以降低耦合度)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。
工厂模式的作用:工厂的方法可以封装对象的创建细节( 比如 为该对象进行加工和数据注入)、可以实现类与类之间的解耦操作(核心思想)。
简单工厂(Simple Factory),它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。这样让使用者只需要关注自己需要的,而不需要关注这个东西是怎么创建的,直接拿来用就行。

// 抽象父类
public abstract class Car {
private String brand; // 品牌
private String color; // 颜色
private int price; // 价格
//跑
public abstract void run();
public Car(String brand, String color, int price) {
this.brand = brand;
this.color = color;
this.price = price;
}
public Car() {
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
// 宾利车
public class BentleyCar extends Car {
@Override
public void run() {
System.out.println("一辆价格为:" + getPrice() + "万" + getColor() + "的" + getBrand() + "正在冒着烟的跑>>>");
}
}
// 法拉利
public class FerrariCar extends Car {
@Override
public void run() {
System.out.println("一辆价格为:" + getPrice() + "万" + getColor() + "的" + getBrand() + "正在疯狂的跑>>>");
}
}
//简单工厂类
public class CarFactory {
/**
* 静态方法:通过指定类型创建汽车对象
*
* @param msg 汽车类型
* @return 抽象类Car的子类对象
*/
public static Car createCar(String msg) {
switch (msg) {
case "binli":
Car binli = new BentleyCar();
binli.setBrand("宾利XXX");
binli.setColor("黑色");
binli.setPrice(400);
return binli;
case "falali":
Car falali = new FerrariCar();
falali.setBrand("法拉利拉法");
falali.setColor("红色");
falali.setPrice(500);
return falali;
default:
System.out.println("对不起该工厂无法完成此车的创建。");
return null;
}
}
}
测试类:
public class MyTest {
public static void main(String[] args) {
//通过工厂创建对象
Car binli = CarFactory.createCar("binli");
binli.run();
Car falali = CarFactory.createCar("falali");
falali.run();
}
}

首先xml和properties都是文本文件,里面存的内容都是用来做配置的,可以被读取出来 。其次xml比properties功能更加丰富、结构更加清晰(使用标签,类似html)、还能嵌套使用、自定义标签等等。
XML(全称:EXtensible Markup Language),可扩展标记语言。
、、、、 等等。XML 它是一种标记语言,很类似 HTML,标签都是自定义的。(但是HTML就不能用自定义的标签)
XML的作用:用于进行存储数据和传输数据、作为软件的配置文件。
XML的版本:W3C(万维网联盟)在1998年2月发布1.0版本,2004年2月又发布1.1版本,但是1.1版本不能向下兼容1.0版本,所以1.1版本就没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。所以到现在用的还是1.0版本。
.xml。、
)。(同HTML写法)

组成部分:文档声明、指令、标签、属性、文本。
1、文档声明:(写在xml文档的第一行)
,例如
2、指令(了解):结合css的。

3、标签:标签名称自定义的。
<beans>
<bean name="User" id="b001">大家好今天没喝bean>
<bean name="Person" id="b001">
<property name="username" value="root">一切都好property>
bean>
<resource href="www.good.com"/>
<person>person>
<student>student>
beans>
4、属性:
属性名="属性值",其中属性值必须使用单引或双引。 <bean name="User" id="b001">大家好今天没喝bean>
5、文本:
<beans>
<bean>3<2bean>
beans>
转义字符:

文档约束: 用来限定xml文件中的标签以及属性应该怎么写。(约定大于配置)
xml文档约束有两种:DTD(文件后缀名.dtd)、Schema(文件后缀名.xsd)。
dtd约束的优缺点:可以约束xml文件的编写,不能约束具体的数据类型。
DTD约束快速入门:
1、编写dtd约束文档:(文件名student.dtd)
<!ELEMENT students (student*) >
<!ELEMENT student (name,age,gender) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ATTLIST student number ID #REQUIRED>
2、引入dtd文档到xml文档中。
(1)内部dtd:将约束规则定义在xml文档中。
DOCTYPE students [
<!ELEMENT students (student*) >
<!ELEMENT student (name,age,gender) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT gender (#PCDATA) >
<!ATTLIST student number ID #REQUIRED>
]>
<students>
<student number="stu01">
<name>张三name>
<age>123age>
<gender>男gender>
student>
<student number="stu02">
<name>李四name>
<age>18age>
<gender>女gender>
student>
students>
(2)外部dtd:将约束规则定义在外部的dtd文件中。
。。
DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="stu01">
<name>张三name>
<age>123age>
<gender>男gender>
student>
<student number="stu02">
<name>李四name>
<age>18age>
<gender>女gender>
student>
students>
4.2 Schema([ˈskiːmə]):可以约束XML文件的标签内容格式,以及具体的数据类型(type属性)。本身自己也是xml文件,格式更严谨。
Schema约束快速入门:
1、编写Schema约束文档:(student.xsd)
<xsd:schema xmlns="http://www.baidu.com/xml"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.baidu.com/xml"
elementFormDefault="qualified">
<xsd:element name="students" type="studenstType"/>
<xsd:complexType name="studenstType">
<xsd:sequence>
<xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
xsd:sequence>
xsd:complexType>
<xsd:complexType name="studentType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="age" type="ageType"/>
<xsd:element name="gender" type="genderType"/>
xsd:sequence>
<xsd:attribute name="number" type="numberType" use="required"/>
xsd:complexType>
<xsd:simpleType name="ageType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="256"/>
xsd:restriction>
xsd:simpleType>
<xsd:simpleType name="genderType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="male"/>
<xsd:enumeration value="female"/>
xsd:restriction>
xsd:simpleType>
<xsd:simpleType name="numberType">
<xsd:restriction base="xsd:string">
<xsd:pattern value="stu_\d{4}"/>
xsd:restriction>
xsd:simpleType>
xsd:schema>
2、引入schame约束文档到xml中。
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.baidu.com/xml student.xsd"
xmlns="http://www.baidu.com/xml">
<student number="stu_1001">
<name>张三name>
<age>18age>
<gender>malegender>
student>
<student number="stu_1002">
<name>李四name>
<age>101age>
<gender>femalegender>
student>
students>
扩展:
