工厂的指责就是制作产品,那么产品就可以理解为是我们的对象,而工厂就是为了实例化对象而对象的,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。
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{
-
- @Override
- public Car createCar() {
- return new BmwCar();
- }
- }
- // 造奔驰车的工厂
- class BcCarFactory implements Factory{
-
- @Override
- public 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 {
- @Override
- public Car createWheel() {
- return new Wheel("宝马");
- }
-
- @Override
- public Car createChair() {
- return new Chair("宝马");
- }
- }
-
- // 造奔驰车零件的工厂
- class BcFactory implements Factory {
- @Override
- public Car createWheel() {
- return new Wheel("奔驰");
- }
-
- @Override
- public 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+"车座椅");
- }
- }