(创建型)设计模式——抽象工厂(abstract Factory)

ps:在以下讲述抽象工厂模式中,模仿的场景如下:我们有一个抽象工厂AbstractFactory,是用来创建生产不同产品族的工厂的。产品族中含有三种类型的产品,食物Food,交通工具Vehicle,武器Weapon。从类图中可以看出,AbstracFactory生产出了现代化工厂ModernFactory。然后对产品族具体化,食物具体为面包Bread,交通工具具体为汽车Car,武器具体为AK47,由这三种产品组成现代化的产品族。由现代化工厂ModernFactory来生产。若以后需要扩展其它的产品族,我们只需要利用抽象工厂AbstractFactory来创建生产此种产品族的工厂即可。类图和代码如下。

在这里插入图片描述
1、抽象工厂AbstractFactory

public abstract class AbstractFactory {

    public abstract Food createFood();

    public abstract Vehicle createVehicle();

    public abstract Weapon createWeapon();

}

2、抽象的产品族(食物Food,交通工具Vehicle,武器Weapon)

public abstract class Food {

    public abstract void eat();

}
public abstract class Vehicle {

   public  abstract  void  go();

}

public abstract class Weapon {

    public abstract void shoot();

}

3、具体化的产品族(面包Bread,汽车Car,武器AK47)

public class Bread extends Food {
    @Override
    public void eat() {
        System.out.println("eat bread........");
    }
}
public class Car extends Vehicle {
    @Override
    public void go() {
        System.out.println("car is running");
    }
}

public class AK47 extends Weapon {

    @Override
    public void shoot() {
        System.out.println("AK47 tutututuutt......");
    }

}

4、生产(面包Bread,汽车Car,武器AK)产品族的具体化工厂ModernFactory

public class ModernFactroy extends AbstractFactory {
	
	//单例工厂
    public static final ModernFactroy MODERN_FACTROY = new ModernFactroy();
	
    private ModernFactroy(){};

    @Override
    public Food createFood() {
        return  new Bread();
    }

    @Override
    public Vehicle createVehicle() {
        return new Car();
    }

    @Override
    public Weapon createWeapon() {
        return new AK47();
    }

}

5、Main(测试)

public class Main {

    public static void main(String[] args) {

        //获取生产具体产品族的工厂
        AbstractFactory factory = ModernFactroy.MODERN_FACTROY;

        factory.createVehicle().go();
        factory.createFood().eat();
        factory.createWeapon().shoot();

    }
}

总结:抽象工厂模式根据具体的产品族来创建不同的工厂。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值