Java中的工厂模式(2)

上面已经引入了抽象工厂这一概念,我们有了基础,就可以考虑一下稍微复杂一点的业务了。
比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。
于是,我们可以对原有的抽象工厂进行一下小小的扩展。


比如说:
一个工厂生产一系列的产品包括:AK47,Apple,Car
另一工厂生产一系列的产品包括:MagicStick,MushRoom,Broom
则:
我们先把产品抽象为Weapon,Food,Vehicle,它们做为一个整体,有两套实现。
然后就有一个抽象工厂,它负责生产,这样就有了:createWeapon,createFood,createVehicle的三个抽象方法
两个实现工厂,DefaultFactory和MagicFactory。


代码如下:
public abstract class Weapon {
public abstract void shoot();
}
public abstract class Food {
public abstract void bite();
}
public abstract class Vehicle {
public abstract void run();
}


public class AK47 extends Weapon{
public void shoot(){
System.out.println("with AK47");
}
}
public class Apple extends Food {
public void bite(){
System.out.println("with apple");
}
}
public class Car extends Vehicle{
public void run(){
System.out.println("with Car");
}
}
Magic的产品我就省略不写了


public abstract class AbstractFactory {
public abstract Vehicle createVehicle();
public abstract Weapon createWeapon();
public abstract Food createFood();
}
public class DefaultFactory extends AbstractFactory{
@Override
public Food createFood() {
return new Apple();
}
@Override
public Vehicle createVehicle() {
return new Car();
}


@Override
public Weapon createWeapon() {
return new AK47();
}
}
MagicFactory我就省略了




测试:


public static void main(String[] args) {
/*AbstractFactory f = new DefaultFactory();*/
AbstractFactory f = new MagicFactory();
Weapon ak = f.createWeapon();
ak.shoot();
Food ap = f.createFood();
ap.bite();
Vehicle car = f.createVehicle();
car.run();
}


好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值