Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

一、概述

1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品

PS:抽象工厂与普通工厂各自的优缺点:

(1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥

(2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方

 

二、类结构

1.Televison.java

2.Fridge.java

3.SamsumgTelevison.java

4.SamsungFridge.java

5.HaierTevevison.java

6.HaierFridge.java

7.AbstractFactory.java

8.SamsungFactory.java

9.HaierFactory.java

Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

 

 

三、代码

1.Televison.java

public abstract class Televison {



	abstract void show();

}

  

2.Fridge.java

public abstract class Fridge {



	abstract void cool();

}

  

3.SamsumgTelevison.java

public class SamsungTelevison extends Televison {



	@Override

	public void show(){

		System.out.println("SamsungTelevison showing...........");

	}

}

  

4.SamsungFridge.java

public class SamsungFridge extends Fridge {



	@Override

	void cool() {

		System.out.println("SamsungFridge cooling");

	}



}

  

5.HaierTevevison.java

public class HaierTelevison extends Televison {



	@Override

	void show() {

		System.out.println("海尔电视 showinng...........");

	}



}

  

6.HaierFridge.java

public class HaierFridge extends Fridge {



	@Override

	void cool() {

		System.out.println("海尔冰箱冷却中............");

	}



}

  

7.AbstractFactory.java

public abstract class AbstractFactory {

	abstract Televison createTelevison();

	abstract Fridge createFridge();

}

  

8.SamsungFactory.java

public class SamsungFactory extends AbstractFactory {



	@Override

	Televison createTelevison() {

		return new SamsungTelevison();

	}



	@Override

	Fridge createFridge() {

			return new SamsungFridge();

	}



}

  

9.HaierFactory.java

 

public class HaierFactory extends AbstractFactory {



	@Override

	Televison createTelevison() {

		return new HaierTelevison();

	}



	@Override

	Fridge createFridge() {

		return new HaierFridge();

	}



}

  

10.Test.java

public class Test {



	@org.junit.Test

	public void test(){

		AbstractFactory factory = new SamsungFactory();

		Televison tv = factory.createTelevison();

		Fridge fridge = factory.createFridge();

		tv.show();

		fridge.cool();

		

		System.out.println("=======================================");

		

		factory = new HaierFactory();

		tv = factory.createTelevison();

		fridge = factory.createFridge();

		tv.show();

		fridge.cool();

	}

}

  

运行结果:

Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式

你可能感兴趣的:(抽象工厂模式)