简单工厂模式,工厂模式,抽象工厂模式
Posted 乔不思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工厂模式,工厂模式,抽象工厂模式相关的知识,希望对你有一定的参考价值。
今天在看电子书时,突然忘记了工厂模式的几种形式,不用也忘得快,尽快复习下喽。。。
工厂模式有三种,简单工厂模式,工厂模式,抽象工厂模式
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();
工厂模式的这三种形式经常容易混淆,具体也就会在一般面试中遇到过,具体一般写代码,能达到“唯手熟尔”的境界就可以了,没必要较真这个。。。
以上是关于简单工厂模式,工厂模式,抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章