今天在看电子书时,突然忘记了工厂模式的几种形式,不用也忘得快,尽快复习下喽。。。
工厂模式有三种,简单工厂模式,工厂模式,抽象工厂模式
1.简单工厂模式:
简单将产品的制造进行封装,不分类别只是简单的 工厂和产品的依赖关系
具体要素: 工厂(静态工厂方法),抽象产品,具体产品
当然按照一般写法是将 产品进行抽象,不过实际开发中多变通 具体下面一个例子实现下简单工厂
interface Car{
void run();
}
class Bwm524 implements Car{
@Override
public void run() {
System.out.println("524...run");
}
}
class Bwm530 implements Car{
@Override
public void run() {
System.out.println("530...run");
}
}
class Factroy{
public static Car getCar(String car){
if(car.equals("524")){
return new Bwm524();
}else if(car.equals("530")){
return new Bwm530();
}else{
throw new RuntimeException("---");
}
}
2.工厂模式:简单工厂模式存在缺陷,如果产品不断地添加,那么就得在工厂方法中添加对应的代码来实现,可扩展性不高,那么就应运而生了工厂模式,简单理解,工厂模式就是对每一个(类)产品做一个具体的工厂类,也就是说 把产品具体的生成交给了对应的工厂类,而不是像简单工厂那样统一生产。
具体要素:抽象工厂类,具体工厂类,抽象产品,具体产品
示例代码:
interface Car1{
void run();
}
class Bwm implements Car1{
@Override
public void run() {
System.out.println("524...run");
}
}
class Audi implements Car1{
@Override
public void run() {
System.out.println("q1...run");
}
}
interface Factroy1{
Car1 createCar(String name);
}
/**
* 宝马汽车制造工厂
* @author zhousongqiao
*
*/
class BwmFactory1 implements Factroy1{
@Override
public Car1 createCar(String name) {
return new Bwm();
}
}
/**
* 奥迪汽车制造工厂
* @author zhousongqiao
*
*/
class AudiFactory1 implements Factroy1{
@Override
public Car1 createCar(String name) {
return new Audi();
}
}
3.抽象工厂模式:但是现实生成中不难发现,有些工厂即生产A产品,有生产B产品,可能FA工厂生产的A1和A2中A1产品质量好,FB工厂生产的B1和B2中B2质量比较好,为了追求质量好,那么有些时候就需要FA工厂的A1产品和FB工厂的B2产品。明显,按照上述,工厂模式已经不再适应这种场景,进而需要对产品进行继续抽象,并且需要改造抽象的工厂方法,以便具体的工厂能实现多个产品的生产
抽象工厂模式要素: 抽象工厂,具体工厂,抽象产品(多个),具体产品(多个)【没有用工具画图---见谅】
代码示例:
/**
* 汽车抽象
* @author zhousongqiao
*
*/
interface Car2{
void run();
}
class Bwm524_2 implements Car2{
@Override
public void run() {
System.out.println("524...run");
}
}
class Bwm530_2 implements Car2{
@Override
public void run() {
System.out.println("530...run");
}
}
class AudiQ1_2 implements Car2{
@Override
public void run() {
System.out.println("q1...run");
}
}
class AudoQ7_2 implements Car2{
@Override
public void run() {
System.out.println("q7...run");
}
}
/**
* 汽车制造工厂
* @author zhousongqiao
*
*/
interface Factroy2{
Car2 createBmwCar(String name);
Car2 createAudiCar(String name);
}
/**
* 低品质汽车
* @author zhousongqiao
*
*/
class LowLeverCarFactory implements Factroy2{
@Override
public Car2 createBmwCar(String name) {
return new Bwm524_2();
}
@Override
public Car2 createAudiCar(String name) {
return new AudiQ1_2();
}
}
/**
* 高品质汽车
* @author zhousongqiao
*
*/
class HighLeverCarFactory implements Factroy2{
@Override
public Car2 createBmwCar(String name) {
return new Bwm530_2();
}
@Override
public Car2 createAudiCar(String name) {
return new AudoQ7_2();
}
}
工厂模式的这三种形式经常容易混淆,具体也就会在一般面试中遇到过,具体一般写代码,能达到“唯手熟尔”的境界就可以了,没必要较真这个。。。