工厂的指责就是制作产品,那么产品就可以理解为是我们的对象,而工厂就是为了实例化对象而对象的,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。
1、简单工厂模式
简单工厂模式:也叫静态工厂模式,简单工厂模式相当于试试一个工厂中有各种产品,创建在一个类中,客户无需知道具体产品的名称,只需要知道产品的参数即可,相当于所有的汽车都是由一个厂里面生产出来的的,这个厂既能生产宝马,又能生产奔驰,还能生产其他的品牌的汽车,但是工厂的职责过重,而且当类型过多时不利于系统的扩展维护;简单工厂模式是不属于23种设计模式里面的;
简单工厂模式示例代码
package com.designPatterm.factory.one;
/*** 设计模式-工厂模式: 普通工厂模式*/
public class OrdinaryFactory {public static void main(String[] args) {CarFactory.getInstance("bc").showCar();CarFactory.getInstance("bmw").showCar();}
}// 造车的工厂
class CarFactory {public static Car getInstance(String car){if(car.equals("bmw")){return new BmwCar();}if(car.equals("bc")){return new BcCar();}return null;}
}// 车的接口类
interface Car {public void showCar();
}// 宝马车
class BmwCar implements Car{public void showCar(){System.out.println("我是宝马车");}
}//奔驰车
class BcCar implements Car{public void showCar(){System.out.println("我是奔驰车");}
}
2、工厂方法模式
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。而且每个工厂都只创建一种产品;
工厂方法模式示例代码
package com.designPatterm.factory.two;/*** 设计模式-工厂模式: 工厂方法模式*/
public class FactoryMethod {public static void main(String[] args) {Factory bmwFa = new BmwCarFactory();Factory bcFa = new BcCarFactory();Car bmw = bmwFa.createCar();Car bc = bcFa.createCar();bmw.showCar();bc.showCar();}
}// 工厂接口,所有造车的工厂都实现 Factory 接口
interface Factory{Car createCar();
}// 造宝马车的工厂
class BmwCarFactory implements Factory{@Overridepublic Car createCar() {return new BmwCar();}
}
// 造奔驰车的工厂
class BcCarFactory implements Factory{@Overridepublic Car createCar() {return new BcCar();}
}// 车的接口,所有车都实现 Car 接口
interface Car {public void showCar();
}// 宝马车
class BmwCar implements Car{public void showCar(){System.out.println("我是宝马车");}
}//奔驰车
class BcCar implements Car{public void showCar(){System.out.println("我是奔驰车");}
}
3、抽象工厂模式
上面说到的工厂方法模式里面,每个工厂都只创建一种产品;那么抽象工厂模式就可以理解为每个工厂都可以创建多个产品;
例如: 小米工厂可以生产小米手机和笔记本电脑,而苹果工厂可以生产iphone 和 mac,具体流程图如下:
抽象工厂模式示例代码
package com.designPatterm.factory.three;/*** 设计模式-工厂模式: 抽象工厂模式*/
public class AbstractFactory {public static void main(String[] args) {// 实例化工厂类Factory bmwFa = new BmwFactory();Factory bcFa = new BcFactory();// 生产宝马车的轮子和座椅Car bmwWheel = bmwFa.createWheel();Car bmwChair = bmwFa.createChair();// 生产奔驰车的轮子和座椅Car bcWheel = bcFa.createWheel();Car bcChair = bcFa.createChair();// 展示生产完成的宝马车轮子和座椅bmwWheel.showCar();bmwChair.showCar();// 展示生产完成的宝马车轮子和座椅bcWheel.showCar();bcChair.showCar();}
}// 工厂接口,所有造车的工厂都实现 Factory 接口
interface Factory{// 生产轮子Car createWheel();// 生产座椅Car createChair();
}// 造宝马车零件的工厂
class BmwFactory implements Factory {@Overridepublic Car createWheel() {return new Wheel("宝马");}@Overridepublic Car createChair() {return new Chair("宝马");}
}// 造奔驰车零件的工厂
class BcFactory implements Factory {@Overridepublic Car createWheel() {return new Wheel("奔驰");}@Overridepublic Car createChair() {return new Chair("奔驰");}
}// 车的接口,所有车都实现 Car 接口
interface Car {public void showCar();
}// 轮子
class Wheel implements Car {String carName;public Wheel(String carName){this.carName = carName;}public void showCar(){System.out.println("生产了 "+carName+"车轮子");}
}// 座椅
class Chair implements Car {String carName;public Chair(String carName){this.carName = carName;}public void showCar(){System.out.println("生产了 "+carName+"车座椅");}
}