软件设计模式学习(四)简单工厂模式

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

软件设计模式学习(四)简单工厂模式

STYeeQan   2020-03-05 我要评论
# 简单工厂模式 > 简单工厂模式是最简单的设计模式之一,虽然不属于二十三种设计模式,但应用也较为频繁。学习它也是学习其他创建型模式的基础 ---
## 模式定义 在实际软件开发中,有时需创建一些来自于相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,这些被创建的实例具有共同的父类。习惯上将获得其他类实例的方法定义为static方法,外部不需要实例化这个类就可以直接调用该方法获得对象,该方法也称为静态工厂方法。 简单工厂模式又称为静态工厂方法模式,根据参数的不同返回不同的类型的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。
## 简单工厂模式实例之手机工厂 1. #### 实例说明 某手机厂专为各手机品牌生产手机,调用工厂的方法时传入参数,则根据传入的不同参数返回不同品牌的手机。 2. #### 实例类图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305220242389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE5faGFuZHNvbWU=,size_16,color_FFFFFF,t_70) 3. #### 实例代码及解释 1. 抽象产品类Phone ```java public abstract class Phone { public abstract void use(); } ``` 2. 具体产品类HuaweiPhone ```java public class HuaweiPhone extends Phone { @Override public void use() { System.out.println("华为手机使用中...."); } } ``` 3. 具体产品类XiaomiPhone ```java public class XiaomiPhone extends Phone { @Override public void use() { System.out.println("小米手机使用中...."); } } ``` 4. 工厂类PhoneFactory ```java public class PhoneFactory { public static Phone producePhone(String brand) { if(brand.equalsIgnoreCase("huawei")) { System.out.println("生产华为手机..."); return new HuaweiPhone(); } else if (brand.equalsIgnoreCase("xiaomi")) { System.out.println("生产小米手机"); return new XiaomiPhone(); } else { System.out.println("暂无该手机生产...."); return null; } } } ``` 5. 配置文件 ```xml <?xml version="1.0" encoding="UTF-8" ?> huawei ``` 6. XML操作工具类 ```java public class XMLUtilPhone { public static String getBrandName() throws Exception { //创建解析器工厂 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); //创建解析器 DocumentBuilder builder = builderFactory.newDocumentBuilder(); //得到document Document document = builder.parse("configPhone.xml"); //获取包含品牌名称的文本节点 NodeList brandNameList = document.getElementsByTagName("brandName"); Node classNode = brandNameList.item(0).getFirstChild(); String brandName = classNode.getNodeValue().trim(); return brandName; } } ``` 7. 测试类 ```java public class Test { public static void main(String[] args) throws Exception { String brandName = XMLUtilPhone.getBrandName(); Phone phone = PhoneFactory.producePhone(brandName); phone.use(); } } ``` 8. 结果分析 如果在配置文件中将节点内容设置为huawei,则输出结果为: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305220324973.png) 如果设置为vivo,则输出结果为: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200305220403627.png) 如果希望系统支持生产vivo牌手机,则需要添加一个新的具体类VivoPhone,同时还需要修改工厂中的方法。因此简单工厂模式最大的问题在于工厂类的职责过于沉重,并且修改工厂类逻辑判断这一点是与开闭原则相违背的。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们