Factory Method Pattern 工厂模式 学习笔记

本文介绍工厂方法模式的基本原理,通过示例代码展示了如何定义产品基类及具体产品类,并实现了一个具体的工厂类来创建不同类型的ID卡产品。该模式允许在不修改原有代码的基础上增加新的产品类型。

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

Factory Method Pattern
在父类规定对象的创建方法,但并没有深入到具体的类名,所有具体的完整内容都放在子类。
根据这个原则,我们可以大致分成产生对象实例的大纲(框架)和实际产生对象实例的类。

package com.sw.Framework;
/**
 * 以抽象的方法createProduct制作产品。
 * 再利用抽象方法registerProduct注册产品。
 * 其中制作产品和注册产品都由之类负责。
 * 产生Product参与者的抽象类。
 * @author sw
 *
 */
public abstract class Factory {
 public final Product create(String owner){
  Product p = createProduct(owner);
  registerProduct(p);
  return p ;
 }
 public abstract Product createProduct(String owner);
 public abstract void registerProduct(Product product);
}

package com.sw.Framework;
//框架的部分,规定此Pattern所产生的对象实例应有的接口(API)。
public abstract class Product {
 public abstract void use() ;
}

package com.sw.idcard;
import com.sw.Framework.Product;
//实际产品的参与者。规定具体的产品样式。
public class IDCard extends Product {
 private String owner ;
 IDCard(String owner){
  System.out.println("建立"+owner+"的卡");
  this.owner = owner ;
 }
 public void use() {
  System.out.println("使用"+owner+"的卡");
 }
 public String getOwner(){
  return this.owner ;
 }
}

package com.sw.idcard;
import java.util.Vector;
import com.sw.Framework.Factory;
import com.sw.Framework.Product;
//规定制造实际产品的类
public class IDCardFactory extends Factory {
 private Vector owners = new Vector();

 public Product createProduct(String owner) {
  return new IDCard(owner);
 }

 public void registerProduct(Product product) {
  owners.add(((IDCard)product).getOwner());
 }
 public Vector getOwners(){
  return owners ;
 }
}

package com.sw.idcard;
import java.util.Iterator;
import com.sw.Framework.Factory;
import com.sw.Framework.Product;
public class main {
 public static void main(String[] args){
  Factory factory = new IDCardFactory();
  Product card1 = factory.create("大法师");
  Product card2 = factory.create("恶魔猎手");
  Product card3 = factory.create("剑圣");
  card1.use();
  card2.use();
  card3.use();
  Iterator it = ((IDCardFactory)factory).getOwners().iterator();
  System.out.println("所有用户信息:");
  while(it.hasNext()){
   System.out.print(it.next()+" ");
  }
 }
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值