设计模式——工厂模式

76 阅读2分钟

在业务中,对于业务对象的创建并不一定是简单的一个类,一个业务对象可能并不能确定为某个类而是一系列类,包含了一系列操作,需要创建一系列实例,get和set一系列变量

1、简单工厂模式

又称静态工厂方法模式,它存 在的目的很简单:定义一个用于创建对象的接口

简单工厂模式.png

public class Driver{ 
//工厂方法.注意 返回类型为抽象产品角色
 public static Car driverCar(String s)throws Exception { 
 //判断逻辑,返回具体的产品角色给 Client 
 if(s.equalsIgnoreCase("Benz")) 
 return new Benz(); 
 else if(s.equalsIgnoreCase("Bmw")) 
 return new Bmw(); 
 ...... 
 else throw new Exception(); 
     
 public class Magnate{ 
 public static void main(String[] args){ 
 try{ 
 //告诉司机我今天坐奔驰 
 Car car = Driver.driverCar("benz"); 
 //下命令:开车 
 car.drive();

开闭原则评估:在业务加入一个新的类时,需要在工厂内变动逻辑操作

2、工厂方法模式

把简单工厂和产品写成接口,不同类型对象的创建用继承了这个接口的工厂实现

工厂方法模式.png

public interface Driver{ 
 public Car driverCar(); 
} 
public class BenzDriver implements Driver{ 
 public Car driverCar(){ 
 return new Benz(); 
 } 
} 
public class BmwDriver implements Driver{ 
 public Car driverCar() { 
return new Bmw(); 
 } 
} 
 public class Magnate 
{ 
 public static void main(String[] args) 
 { 
 try{ 
 Driver driver = new BenzDriver(); 
 Car car = driver.driverCar(); 
 car.drive(); 
 } 
 …… 
}

相当于给简单工厂派了几个手下,让他们定义相应的方法,负责相应的类对象的创建,因此叫做工厂方法模式

使用情况:

  1. 当客户程序不需要知道要使用对象的创建过程。
  2. 客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。

开闭原则评估:当更新了创建对象的条件,比如一次要在不同工厂内负责创建的对象各挑一个出来创建,就必须修改工厂的组织

3、抽象工厂模式

产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。 还是让我们用一个例子来形象地说明一下吧

产品族.png

抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象

结构:

抽象工厂模式.png