创建对象之Factory (工厂)

本文探讨了工厂模式的两种不同实现方式,一种是通过静态方法来封装类的实例化过程,另一种是在父类中定义创建对象的方法,由子类具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Factory有两种理解方式,个人感觉不太一样,不知道哪种理解方式比较正确
1、引入Factory  Pattern的目的是为了封装类的实例化操作

public class Factory{

  public static Sample creator(int which){
         
//getClass 产生Sample 一般可使用动态类装载装入类。
  if (which==1)
    return new SampleA();
  else if (which==2)
    return new SampleB();

  }

}

那么在你的程序中,如果要实例化Sample时.就使用

Sample sampleA=Factory.creator(1);

这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会,这个原理可以用很通俗的话来比喻:就是具体事情做得越多,越容易范错误

2、Factory Pattern在父类规定对象的创建方法,但不深入到具体的类名,所有具体的实现都放在了子类,大致可以分为产生对象实例的大纲(框架)和实际产生对象实例的类两方面

实例:

framework中的Factory是实现creat的抽象类
 public final Product creat(String owner) {
  Product p = creadProduct(owner);
  registerProduct(p);
  return p;
 }

 public abstract Product creadProduct(String owner);
famework中的Product是仅实现use方法的抽象类

具体的生成和使用方法都用idcard中的类具体实现
 IDcardFactory:
 IDcardFactory extends Factory 
 public synchronized Product creadProduct(String owner) {
  IDcard ic = new IDcard(owner);
  return ic;
 }

IDcarrd:
class IDcard extends Product
IDcard(String owner) {
  System.out.println("建立" + owner +"的卡");
  this.owner = owner;
 }
此处构造函数不是public 只有通过同一个包中的factory才可以产生这个对象实例

 public void use() {
  System.out.println("使用"  + owner + "的卡");
 }

具体使用:
 public static void main(String[] args) {
  Factory fc = new IDcardFactory();
  Product p1 = fc.creat("card1");
  Product p2 = fc.creat("card2");
  Product p3 = fc.creat("card3");
  p1.use();
  p2.use();
  p3.use();
 }
这样不必修改framework包中的内容就能够创建出不同的产品和工厂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值