上面已经引入了抽象工厂这一概念,我们有了基础,就可以考虑一下稍微复杂一点的业务了。
比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。
于是,我们可以对原有的抽象工厂进行一下小小的扩展。
比如说:
一个工厂生产一系列的产品包括: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();
}
好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。
比如说:现在工厂不再把单个的产品当做操作原子了,而是针对一系列产品了。如果客户想换一套产品,只需要换一个工厂即可。比如说:换主题功能。
于是,我们可以对原有的抽象工厂进行一下小小的扩展。
比如说:
一个工厂生产一系列的产品包括: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();
}
好了,这就是工厂模式了,其实个人感觉,也是一种特殊的准代理模式,代理的是生产而已。