博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——工厂方法模式
阅读量:7282 次
发布时间:2019-06-30

本文共 1514 字,大约阅读时间需要 5 分钟。

知识点:工厂方法模式创建对象

(一)什么是工厂方法模式

定义一个创建产品对象的工厂接口,子类工厂实现接口来创建具体的产品对象

(二)角色

抽象工厂:是工厂方法模式的核心,创建具体对象的的工厂类必须实现这个接口

具体工厂:实现抽象工厂接口的具体工厂,用来创建具体产品对象

抽象产品:具体产品对象拥有的共同父类或者接口

具体产品:实现抽象产品的接口,包含了产品的具体细节

产品使用者:使用产品者

(三)代码实例

//工厂方法设计模式 public class FactoryMethodTest {
public static void main(String[] args) {
//创建某种工厂,创建对应的产品对象,执行产品对象中的doWork()方法 PersonWorkFactory stuFac=new StudentWorkFactory(); stuFac.getWorkClass().doWork(); PersonWorkFactory teaFac=new TeacherWorkFactory(); teaFac.getWorkClass().doWork(); } } //抽象工厂 interface PersonWorkFactory{ Work getWorkClass(); } //具体工厂,生产产品 class StudentWorkFactory implements PersonWorkFactory{ @Override public Work getWorkClass() { return new StudentWork(); } } class TeacherWorkFactory implements PersonWorkFactory{ @Override public Work getWorkClass() { return new TeacherWork(); } } //抽象产品 interface Work{ void doWork(); } //具体产品 class StudentWork implements Work{ @Override public void doWork() { System.out.println("学习!"); } } class TeacherWork implements Work{ @Override public void doWork() { System.out.println("教学生知识!"); } } 执行结果: 上面的核心工厂PersonWorkFactory不负责产品对象的创建工作,是一个抽象工厂的角色,只负责具体工厂子类实现的接口,这样抽象化的好处使得系统在不修改具体工厂角色的情况下,可以引进新的产品,遵循开闭原则,提高了系统的可扩展性。 (四)优点 (1)使用工厂方法创建具体产品对象,隐藏了具体对象的创建细节,只需要关心具体产品对应的工厂 (2)遵循开闭原则,当加入新的产品类时,只需要同时加入相应的工厂类,实现扩展,无需修改原来的代码,提高了代码的可扩展性 参考博客:https://www.cnblogs.com/chenxkang/p/6689631.html https://www.cnblogs.com/chenpi/p/5141376.html#_label3

转载于:https://www.cnblogs.com/shuaifing/p/10844178.html

你可能感兴趣的文章
android 隐藏输入法键盘
查看>>
Android jni 中打印logcat日志
查看>>
SSL和keystore生成、导入等配置
查看>>
The Eagles Hotel California Lyrics
查看>>
软件工程——课程评价
查看>>
OpenStack Placement Project
查看>>
微信支付问题
查看>>
购买类目的概率预测
查看>>
Ajax Step By Step2
查看>>
codeforces 701 B. Cells Not Under Attack
查看>>
当同时安装Python2和Python3后,如何兼容并切换使用详解(比如pip使用)
查看>>
Creating a Custom Page Layout in SharePoint 2013
查看>>
mysql foreignkey
查看>>
Django 中的自定义分页标签
查看>>
[转]ASP.NET自定义控件复杂属性声明持久性浅析
查看>>
PAT (Basic Level) Practise (中文)-卡拉兹(Callatz)猜想
查看>>
第八周进度总结
查看>>
axios 注意点
查看>>
刷新ListView刷新时的闪烁问题
查看>>
cuda c例程学习——eigenvalues(1)
查看>>