简单工厂
简单工厂模式的工厂类用来生产同一等级结构中的任意产品。(对于增加新的产品,无能为力)
public class Car{
public void function1();
public void function2();
}
public class Broom{
public void function1();
public void function2();
}
/**
* 简单工厂的可扩展性不好
*/
public class SimpleVehicleFactory {
public Car createCar() {
//before processing
return new Car();
}
public Broom createBroom() {
return new Broom();
}
}
工厂方法
工厂方法 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
每个产品一个工厂
//产品接口
public interface Moveable {
void go();
}
//具体产品1
public class Car implements Moveable {
public void go() {
System.out.println("Car go wuwuwuwuw....");
}
}
//具体产品2
public class Broom implements Moveable{
@Override
public void go() {
System.out.println("broom flying chuachuachua .....");
}
}
//产品1工厂方法
public class CarFactory {
public Moveable create() {
System.out.println("a car created!");
return new Car();
}
}
//产品2工厂方法
public class BroomFactory {
public Moveable create() {
System.out.println("a broom created!");
return new Broom();
}
}
抽象工厂
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
对产品族扩展友好
//抽象工厂
public abstract class AbastractFactory {
abstract Food createFood();
abstract Vehicle createVehicle();
abstract Weapon createWeapon();
}
//产品族1的具体工厂
public class ModernFactory extends AbastractFactory {
@Override
Food createFood() {
return new Bread();
}
@Override
Vehicle createVehicle() {
return new Car();
}
@Override
Weapon createWeapon() {
return new AK47();
}
}
//产品族2的具体工厂
public class MagicFactory extends AbastractFactory {
@Override
Food createFood() {
return new MushRoom();
}
@Override
Vehicle createVehicle() {
return new Broom();
}
@Override
Weapon createWeapon() {
return new MagicStick();
}
}
//产品抽象类1
public abstract class Food {
abstract void printName();
}
//具体产品1
public class Bread extends Food{
public void printName() {
System.out.println("wdm");
}
}
//具体产品2
public class MushRoom extends Food{
public void printName() {
System.out.println("dmg");
}
}
//产品抽象类2
public abstract class Vehicle { //interface
abstract void go();
}
//具体产品1
public class Broom extends Vehicle{
public void go() {
System.out.println("Car go wuwuwuwuw....");
}
}
//具体产品2
public class Car extends Vehicle{
public void go() {
System.out.println("Car go wuwuwuwuw....");
}
}
//产品抽象类3
public abstract class Weapon {
abstract void shoot();
}
//具体产品1
public class MagicStick extends Weapon{
public void shoot() {
System.out.println("diandian....");
}
}
//具体产品2
public class AK47 extends Weapon{
public void shoot() {
System.out.println("tututututu....");
}
}