简单工厂模式,工厂模式,抽象工厂模式

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();
	
	

工厂模式的这三种形式经常容易混淆,具体也就会在一般面试中遇到过,具体一般写代码,能达到“唯手熟尔”的境界就可以了,没必要较真这个。。。


以上是关于简单工厂模式,工厂模式,抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

简单工厂模式+工厂方法模式+抽象工厂模式

工厂模式抽象工厂模式策略模式

设计模式——抽象工厂模式

简单工厂工厂方法抽象工厂区别

iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)

C++实现工厂模式(简单工厂模式工厂方法模式抽象工厂模式)