簡單工廠模式:
建立一個工廠類,對實現(xiàn)了同一接口的不同類進行實例的創(chuàng)建。
簡單工廠的實質(zhì)為:由一個工廠類根據(jù)傳入的參數(shù),動態(tài)的決定應(yīng)該創(chuàng)建哪個產(chǎn)品類的示例
public interface Animal {
public void say();
}
public class Cat implements Animal{
@Override
public void say() {
System.out.println("喵···");
}
}
public class Dog implements Animal {
@Override
public void say() {
System.out.println("汪汪");
}
}
public class SampleFactory {
public static Animal getAnimal(Class c){
Animal animal = null;
try {
animal = (Animal) Class.forName(c.getName()).newInstance();
}catch (Exception e){
System.out.println("異常處理。。。");
}
return animal;
}
}
public class Client {
public static void main(String[] args) {
Animal cat = SampleFactory.getAnimal(Cat.class);
cat.say();
Animal dog = SampleFactory.getAnimal(Dog.class);
dog.say();
}
}
運行結(jié)果

image.png
工廠方法模式:
工廠父類(接口)負責定義產(chǎn)品對象的公共接口,子類工廠負責創(chuàng)建具體的產(chǎn)品對象
public interface Car {
void run();
}
public class Bike implements Car{
@Override
public void run() {
System.out.println("我是自行車");
}
}
public class Bus implements Car{
@Override
public void run() {
System.out.println("我是公交車");
}
}
public interface IFactory {
Car getCar();
}
public class BikeFactory implements IFactory {
@Override
public Car getCar() {
return new Bike();
}
}
public class BusFactory implements IFactory{
@Override
public Car getCar() {
return new Bus();
}
}
public class Client {
public static void main(String[] args) {
IFactory factory = null;
factory = new BikeFactory();
Car bike = factory.getCar();
bike.run();
factory = new BusFactory();
Car bus = factory.getCar();
bus.run();
}
}
運行結(jié)果

image.png
抽象工廠模式:
抽象工廠模式是工廠方法的升級版,用來創(chuàng)建一組相關(guān)或互相依賴的對象。
舉個例子:高配汽車使用A類引擎和A類空調(diào),低配汽車使用B類引擎和B類空調(diào),此時需要兩類工廠進行生產(chǎn)
public interface AirCondition {
}
public class AirConditionA implements AirCondition {
public AirConditionA(){
System.out.println("制造-->空調(diào)A");
}
}
public class AirConditionB implements AirCondition {
public AirConditionB(){
System.out.println("制造-->空調(diào)B");
}
}
public interface Engine {
}
public class EngineA implements Engine {
public EngineA(){
System.out.println("制造-->引擎A");
}
}
public class EngineB implements Engine{
public EngineB(){
System.out.println("制造-->引擎B");
}
}
public interface IFactory {
//制造發(fā)動機
public Engine createEngine();
//制造空調(diào)
public AirCondition createAirCondition();
}
public class FactoryA implements IFactory {
@Override
public Engine createEngine() {
return new EngineA();
}
@Override
public AirCondition createAirCondition() {
return new AirConditionA();
}
}
public class FactoryB implements IFactory{
@Override
public Engine createEngine() {
return new EngineB();
}
@Override
public AirCondition createAirCondition() {
return new AirConditionB();
}
}
public class Client {
public static void main(String[] args) {
FactoryA factoryA = new FactoryA();
factoryA.createEngine();
factoryA.createAirCondition();
FactoryB factoryB = new FactoryB();
factoryB.createEngine();
factoryB.createAirCondition();
}
}
運行結(jié)果

image.png