广州网站外贸推广青岛网站优化多少钱
web/
2025/10/2 18:30:12/
文章来源:
广州网站外贸推广,青岛网站优化多少钱,汉高建设公司网站,网站空间2000m多少钱简单工厂模式 可以根据参数的不同返回不同类的实例 参考#xff1a; CSDN|简单工厂模式 简单工厂通过传给工厂类的参数的不同#xff0c;返回不同的对象#xff0c;包括三部分组成#xff1a;
具体的”产品“工厂类#xff08;实例化并返回”产品“#xff09;客户端 CSDN|简单工厂模式 简单工厂通过传给工厂类的参数的不同返回不同的对象包括三部分组成
具体的”产品“工厂类实例化并返回”产品“客户端使用”产品“
为什么使用简单工厂
”产品“的创建过程可能很复杂涉及到多个不同类之间的依赖通过简单工厂将创建过程隐藏在工厂类中一方面减轻了客户端使用该产品的难度另一方面也防止了客户端错误创建产品造成的安全问题。将产品的生产和消费过程分离开这样如果要有了一个新的产品只需要把它加入到工厂类中客户端需要时工厂类就会返回给它否则的话每次添加一个新的产品都需要修改客户端代码违反开闭原则。
简单工厂的缺点
系统过度依赖工厂类工厂类作为一个”上帝类“负责创建客户端需要的所有对象导致一旦工厂类出错整个系统就会崩溃。如果”产品类“特别多工厂类中就会有很多个分支造成工厂类异常庞大难以维护。每次添加新的产品都要修改工厂类从工厂类的角度看违反了”开闭原则“也不利于系统拓展。工厂方法一般是静态方法不利于继承。
适用场景 工厂类负责创建的对象比较少由于创建的对象较少不会造成工厂方法中的业务逻辑太过复杂。 客户端只知道传入工厂类的参数对于如何创建对象不关心客户端既不需要关心创建细节甚至连类名都不需要记住只需要知道类型所对应的参数。
例
如果需要获取不同的手机对象就可以使用简单工厂具体的手机对象依赖于CPU Camera等通过简单工厂的封装客户端获取 Phone 对象时就不需要了解具体的 ”生产过程“了. 实例化CPU Camera 等配件时也应该使用简单工厂。 package pers.junebao.simple_factory;import pers.junebao.simple_factory.fitting.*;
import pers.junebao.simple_factory.phone.Honor;
import pers.junebao.simple_factory.phone.OnePlus;
import pers.junebao.simple_factory.phone.Phone;public class PhoneFactory {/*** 一个用来产生 Phone 对象的工厂方法* param name 根据 name 产生不同的 Phone 的子类对象* return 返回实例化后的对象name 不匹配返回 null*/public static Phone getPhone(String name) {if(name.toLowerCase().equals(oneplus)){// TODO使用简单工厂重构CPU cpu new Qualcomm();Camera camera new Sony();return new OnePlus(cpu, camera);} else if (name.toLowerCase().equals(honor)) {CPU cpu new Kirin();Camera camera new Leica();return new Honor(cpu, camera);} else {return null;}}
}package pers.junebao.simple_factory;import pers.junebao.simple_factory.phone.Phone;public class Consumer {public static void main(String[] args) {Phone phone PhoneFactory.getPhone(Honor);assert phone ! null;phone.printConfig();}
}
GitHub | 完整代码
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85756.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!