抽象工厂模式例子

抽象工厂模式在农场系统的实现

   //两种抽象产品:水果、蔬菜
  public interface Fruit
  {
  }
  public interface Veggie
  {
  }
   //四种具体产品:北方水果,热带水果,北方蔬菜,热带蔬菜
   //Northern Fruit
  public class NorthernFruit implements Fruit
  {
  private String name;
  public NorthernFruit(String name)
  {
  }
  public String getName()
  {
  return name;
  }
  public void setName(String name)
  {
  this. name = name;
  }
  }
   //TropicalFruit
  public class TropicalFruit implements Fruit
  {
  private String name;
  public TropicalFruit(String name)
  {
  }
  public String getName()
  {
  return name;
  }
  public void setName(String name)
  {
  this. name = name;
  }
  }
   //NorthernVeggie
  public class NorthernVeggie implements Veggie
  {
  private String name;
  public NorthernVeggie(String name)
  {
  }
  public String getName()
  {
  return name;
  }
  public void setName(String name)
  {
  this. name = name;
  }
  }
   //TropicalVeggie
  public class TropicalVeggie implements Veggie
  {
  private String name;
  public TropicalVeggie(String name)
  {
  }
  public String getName()
  {
  return name;
  }
  public void setName(String name)
  {
  this. name = name;
  }
  }
   //抽象工厂角色
  public interface Gardener
  {
  public Fruit createFruit(String name);
  public Veggie createVeggie(String name);
  }
   //具体工厂角色:北方工厂,热带角色
  public class NorthernGardener implements Gardener
  {
  public Fruit createFruit(String name)
  {
  return new NorthernFruit(name);
  }
  public Veggie createVeggie(String name)
  {
  return new NorthernVeggie(name);
  }
  }
  public class TropicalGardener implements Gardener
  {
  public Fruit createFruit(String name)
  {
  return new TropicalFruit(name);
  }
  public Veggie createVeggie(String name)
  {
  return new TropicalVeggie(name);
  }
  }
  这样客户端只需要创建具体工厂的实例,然后调用工厂对象的工厂方法就可以得到所需要的产品对象。
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。下面是一个 Java 抽象工厂模式例子: ``` public interface AbstractFactory { public Shape getShape(String shapeType); } public class ShapeFactory implements AbstractFactory { @Override public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } } public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); } } public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); } } public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } public class FactoryProducer { public static AbstractFactory getFactory(boolean rounded) { if (rounded) { return new RoundedShapeFactory(); } else { return new ShapeFactory(); } } } public class RoundedShapeFactory implements AbstractFactory { @Override public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new RoundedCircle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new RoundedRectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new RoundedSquare(); } return null; } } public class RoundedCircle implements Shape { @Override public void draw() { System.out.println("Inside RoundedCircle::draw() method."); } } public class RoundedRectangle implements Shape { @Override public void draw() { System.out.println("Inside RoundedRectangle::draw() method."); } } public class RoundedSquare implements Shape { @Override public void draw() { System.out.println("Inside RoundedSquare::draw() method."); } } ``` 在这个例子中,我们定义了一个 `AbstractFactory` 接口和两个实现类 `ShapeFactory` 和 `RoundedShapeFactory`。`ShapeFactory` 用于创建普通形状,而 `RoundedShapeFactory` 用于创建圆角形状。我们还定义了一个 `Shape` 接口和三个实现类 `Circle`、`Rectangle` 和 `Square`,它们分别表示圆形、矩形和正方形。在 `ShapeFactory` 和 `RoundedShapeFactory` 中,我们实现了 `AbstractFactory` 接口中的 `getShape()` 方法,用于创建具体的形状对象。最后,我们定义了一个 `FactoryProducer` 工厂类,用于根据需要返回不同的工厂对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值