目录
一、案例引出
二、简单工厂模式
二、抽象工厂
工厂设计模式,顾名思义类似一家工厂来制造各种产品,目的在于提高代码的可扩展性。
一、案例引出
通过接口来实现一类产品的功能,如目前有飞机、轮船、汽车这类产品的实体类,同时需要具备移动的属性,此时我们优先想到的是通过接口来实现,例如:
插件Moveable接口来让各个需要该属性的对象实现,但这样做在业务结构简单是没问题,当业务结构复杂时,该方式的拓展性并不太好,没增加一种产品都需要去实现多个属性接口。
public interface Moveable {void go();
}
public class Car implements Moveable{@Overridepublic void go() {System.out.println("car goes...");}
}
public class Plane implements Moveable{@Overridepublic void go() {System.out.println("plane goes...");}
}
public class Ship implements Moveable{@Overridepublic void go() {System.out.println("ship goes...");}
}
下面来看看工厂模式是如何实现的
二、简单工厂模式
简单工厂模式适用于产品种类单一的业务
通过简单工厂可以有效管理种类单一的产品
public class SimpleFactory {public static Moveable createCar(){//前至处理return new Car();}public static Moveable createShip(){//前至处理return new Ship();}public static Moveable createPlane(){//前至处理return new Plane();}}
产品创建:当产品增加时直接在工厂里进行添加,拓展性较好
public static void main(String[] args) {Moveable car = SimpleFactory.createCar();Moveable ship = SimpleFactory.createShip();Moveable plane = SimpleFactory.createPlane();car.go();ship.go();plane.go();}
二、抽象工厂
对于业务复杂,种类较多的产品时简单工厂并不能有效解决种类繁多管理的问题,由此引入抽象工厂进行管理:
我们可以创建一个抽象工厂来管理各个大类的产品:
public abstract class AbstractFactory {abstract Vehicle createVehicle();abstract Food createFood();abstract Weapon createWeapon();
}
分别创建各个大类的抽象类:
public abstract class Food {abstract void eat();
}
public abstract class Vehicle {abstract void go();
}
public abstract class Weapon {abstract void fight();
}
创建多种不同的工厂来加工不同的产品:都继承自AbastractFactory。产品都继承自类别抽象类。
public class ModernFactory extends AbstractFactory{@OverrideVehicle createVehicle() {return new Car();}@OverrideFood createFood() {return new Bread();}@OverrideWeapon createWeapon() {return new AK47();}
}
public class AncientFactory extends AbstractFactory {@OverrideVehicle createVehicle() {return new Ship();}@OverrideFood createFood() {return new Fish();}@OverrideWeapon createWeapon() {return new Arrow();}
}
以上演示为多个不同工厂的实例。
工厂生产产品:该设计模式也可借鉴单例模式来实现静态工厂。
public static void main(String[] args) {AncientFactory ancientFactory = new AncientFactory();Food food = ancientFactory.createFood();food.eat();}
工厂模式生产和管理产品总结到此。