简单工厂模式

接触的第一个设计模式,最开始接受还有一些困难,但是现在看还是比较好理解的

所以只要我们好好理解,新的知识也会变成自己的知识

目录

简单工厂涉及的类:

UML图

 没有使用到配置文件的客户端代码

 使用到配置文件的客户端代码 

简单工厂模式优点:

简单工厂模式缺点:

Java中创建对象的方式:


对于一些对象他的创建过程比较复杂,而我们又不需要知道创建过程。

简单工厂涉及的类:

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中创建对象的方式:

老师对我们知识的补充:

  1. 通过new关键字直接创建对象
  2. 通过反射机制创建对象
  3. 通过克隆创建对象
  4. 通过工厂类创建对象

为了解决工厂职责太多,不易扩展,引入工厂方法模式

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值