接触的第一个设计模式,最开始接受还有一些困难,但是现在看还是比较好理解的
所以只要我们好好理解,新的知识也会变成自己的知识
目录
对于一些对象他的创建过程比较复杂,而我们又不需要知道创建过程。
简单工厂涉及的类:
1:工厂类 2:抽象产品类 3:具体产品类 4:客户类
客户类只需要给工厂中,创建产品的方法传入一个方法,工厂就会创建出具体产品。
UML图
没有使用到配置文件的客户端代码
更换产品需要修改代码,不符合开闭原则。
public class Client {
public static void main(String args[]) {
Product product;
product = Factory.getProduct("A"); //通过工厂类创建产品对象
product.methodSame();
product.methodDiff();
}
}
使用到配置文件的客户端代码
mport javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtil {
//该方法用于从XML配置文件中提取图表类型,并返回类型名
public static String getChartType() {
try {
//创建文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("src//designpatterns//simplefactory//config.xml"));
//获取包含图表类型的文本结点
NodeList nl = doc.getElementsByTagName("chartType");
Node classNode = nl.item(0).getFirstChild();
String chartType = classNode.getNodeValue().trim();
return chartType;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
public class Client {
public static void main(String args[]) {
Product product;
String type=XMLUtil.getChartType();
product = Factory.getProduct(type); //通过工厂类创建产品对象
product.methodSame();
product.methodDiff();
}
}
简单工厂模式优点:
1:对象创建与使用分离
2:用户只需要参数以及参数所代表的含义即可。
3:通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一 定程度上提高了系统的灵活性
简单工厂模式缺点:
1:工厂职责过重违反单一职责原则
2:由于工厂方法是静态方法,无法形成继承结构不能很好的扩展
3:增加新的产品需要修改工厂类
Java中创建对象的方式:
老师对我们知识的补充:
- 通过new关键字直接创建对象
- 通过反射机制创建对象
- 通过克隆创建对象
- 通过工厂类创建对象
为了解决工厂职责太多,不易扩展,引入工厂方法模式