一、工厂模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的复用性。
什么是工厂设计模式?
我们之前创建对象都是自己手动new出来的,那能不能让一个工厂帮我们造出来,然后我们直接拿来用就行。(使用new的方式创建对象会增加耦合度,无论使用什么框架, 都要减少new的使用以降低耦合度)
工厂模式(Factory Pattern)是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。
工厂模式的作用:工厂的方法可以封装对象的创建细节( 比如 为该对象进行加工和数据注入)、可以实现类与类之间的解耦操作(核心思想)。
1. 简单工厂模式
简单工厂(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();
}
}
2. 工厂方法模式
2. 抽象工厂模式
二、动态代理
三、XML文件
首先xml和properties都是文本文件,里面存的内容都是用来做配置的,可以被读取出来 。其次xml比properties功能更加丰富、结构更加清晰(使用标签,类似html)、还能嵌套使用、自定义标签等等。
1. XML概述
-
XML(全称:EXtensible Markup Language),可扩展标记语言。
- 可扩展:标签都是自定义的,如
<user>、<student>、<bean>、<parent>、<dependencies>
等等。
- 可扩展:标签都是自定义的,如
-
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版本。
2. XML基本语法
- xml文档的后缀名是
.xml
。 - 声明必须是第一行,即
<?xml version="1.0" encoding="UTF-8" ?>
- 文档中有且仅有一个根标签。
- 标签中可以定义属性,属性和标签名空格隔开,属性值必须使用引号引起来。(单双都可以,推荐用双引号)
- 标签必须成对出现,有开始、有结束。(要成对标签、或者自闭合标签 ,如
<bean></bean>
、<br/>
) - 标签名称区分大小写。
- 标签需要正确嵌套。
3. XML的组成部分
组成部分:文档声明、指令、标签、属性、文本。
1、文档声明:(写在xml文档的第一行)
- 格式 :
<?xml 属性列表 ?>
- 属性列表:
- version:版本号,该属性是必须存在的。
- encoding:编码方式,告诉解析引擎当前文档使用的字符集。(如果不指定编码,默认是IOS-8859-1,IDEA会自动生成UTF-8编码所以这块不用管)
standalone:是否独立,yes不依赖其他文件,no依赖其他文件。
2、指令(了解):结合css的。<?xml-stylesheet type="text/css" href="a.css" ?>
3.标签:标签名称自定义的。
XML 元素必须遵循以下命名规则:
名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格