当前位置: 首页 > news >正文

0113_工厂方法(Factory Method)

工厂方法(Factory Method)

意图: 定义一个创建对象的接口,但让子类决定实例化哪个类
UML图:
MethodFactory
优点:

  1. 一个调用者想创建一个对象,只要知道其名称就可以了。
  2. 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
  3. 屏蔽产品的具体实现,调用者只关心产品的接口。

缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

代码示例:

以下是一个简单的工厂方法模式示例,模拟了普通人和机器人的创建场景。

1. 产品接口 (Product Interface)

public interface IHuman {/*** 吃饭行为* 定义人类进食的基本行为*/void eat();}

2. 具体产品 (Concrete Products)

public class Human implements IHuman {/*** 人类姓名属性* 用于标识不同的人类个体*/private String name;/*** 构造方法,用于初始化人类对象* @param name 人类姓名*/public Human(String name) {this.name = name;}/*** 实现IHuman接口的eat方法* 输出当前人类对象正在吃饭的信息*/@Overridepublic void eat() {System.out.println(this.name + "在吃饭");}}public class Robot implements IHuman {/*** 机器人的名称*/private String name;/*** 构造方法,用于初始化机器人的名称** @param name 机器人的名称*/public Robot(String name) {this.name = name;}/*** 实现IHuman接口的eat方法* 机器人通过充电来模拟人类的进食行为*/@Overridepublic void eat() {System.out.println(this.name + "在充电");}}

3. 创建者抽象类 (Creator Abstract Class)

public interface IMethodFacotory {/*** 根据名称创建具体的人类对象* @param name 人类名称* @return 对应的人类对象实例*/IHuman createHuman(String name);
}

4. 具体创建者 (Concrete Creators)

public class HumanFacory implements IMethodFacotory{/*** 根据名称创建具体的人类对象* @param name 人类名称* @return 对应的人类对象实例*/public IHuman createHuman(String name) {return new Human( name);}
}
public class RobotFacory implements IMethodFacotory{/*** 根据名称创建机器人实例* @param name 机器人的名称* @return 返回一个新的Robot对象*/public IHuman createHuman(String name) {return new Robot( name);}
}

5. 客户端代码 (Client Code)

public class Test {public static void main(String[] args) {// 创建具体工厂 - 人类工厂IMethodFacotory humanFactory = new HumanFacory();// 创建具体产品 - 人类实例IHuman human = humanFactory.createHuman("张三");// 调用人类的吃饭行为human.eat();// 切换为机器人工厂IMethodFacotory robotFactory = new RobotFacory();// 创建具体产品 - 机器人实例IHuman robot = robotFactory.createHuman("机器人");// 调用机器人的吃饭行为robot.eat();}
}

在Spring框架中的应用

工厂方法模式在Spring中得到了极致的使用。最典型的例子就是BeanFactoryApplicationContext接口。

  • BeanFactory 是Spring IoC容器的基础接口,其核心方法 getBean(String name) 就是一个工厂方法。
  • 当你调用 ctx.getBean("myService") 时,容器会根据你的配置(XML、注解或Java Config)来决定是返回一个已经存在的单例Bean,还是创建一个新的原型Bean,或者是返回一个被代理包装后的Bean。具体的创建逻辑(即使用哪个具体的工厂)由Spring在启动时根据你的配置来决定和实现。

总结

工厂方法模式通过让子类决定创建的对象类型,来达到将对象创建的过程封装的目的,使得代码更加灵活和可扩展,符合“开闭原则”(对扩展开放,对修改关闭)。它是解耦框架代码的利器。

http://www.sczhlp.com/news/45503/

相关文章:

  • 做视频网站都需要什么软件下载2021最近比较火的营销事件
  • 网站建设阿里云搭建个人网站抖音推广运营
  • 南县做网站多少钱百度推广登录账号首页
  • 长沙房产集团网站建设商洛网站建设
  • 网页版梦幻西游怎么退出帮派湖南网络优化
  • world做网站怎么做连接国际最新新闻热点事件
  • 收费网站怎么做关键字排名查询工具
  • 网站开发 流程长春seo主管
  • 广州网站建设推荐上海seo推广方法
  • HTTP/3/QUIC TLS密码套件配置错误漏洞分析
  • Alexa上下文语音识别的工程实现解析
  • wordpress网站 添加微信支付创建自己的网站
  • jsp做就业网站西安百度推广代运营
  • wordpress网站推广主题网站诊断工具
  • 灯具做外贸的网站有哪些百度关键词优化培训
  • 眉山网站开发江门网站开发多少钱
  • 上海微信网站制作哪家专业山东百度推广总代理
  • 合肥建设工程网平台优化
  • 网站建设培训的心得如何推广店铺呢
  • 安徽建站优秀软文范例200字
  • 专做logo网站叫什么网络服务器的作用
  • 重庆做网站哪家好seo引流什么意思
  • 微信怎么开公众号seo是什么意思中文
  • 做离心开关的企业的网站整合营销传播案例
  • 全球邮企业邮箱新人学会seo
  • 鞍山做网站或东莞网站到首页排名
  • 建立网站的阶段百度推广一个月多少钱
  • 网站开发技术服务费合同范本电商培训班一般多少钱一个月
  • 做垃圾网站 盈利吉林seo基础
  • 网站推广公司兴田德润电话多少网站关键词查询