23种设计模式之抽象工厂模式

上一节  23种设计模式之工厂方法模式

抽象工厂模式

1、用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)

2、抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需的对象是一种非常好的解决方式

类图:

产品族(在此为了方便接口和实现放在了同一文件中):

//产品一
public interface Engine {
	void run();
	void start();
}

class LuxuryEngine implements Engine{

	@Override
	public void run() {
		System.out.println("跑得快!");
	}

	@Override
	public void start() {
		System.out.println("自动测停!");
	}
}

class LowEngine implements Engine{
	@Override
	public void run() {
		System.out.println("跑得慢!");
	}

	@Override
	public void start() {
		System.out.println("不可自动测停!");
	}
}
//产品二
public interface Seat {
	void massage();
}

class LuxurySeat implements Seat{

	@Override
	public void massage() {
		System.out.println("有按摩功能!");
	}
}

class LowSeat implements Seat{

	@Override
	public void massage() {
		System.out.println("没有按摩功能!");
	}
}
public interface Tyre {
	void revolve();
}

class LuxuryTyre implements Tyre{

	@Override
	public void revolve() {
		System.out.println("轮胎磨损快!");
	}
}

class LowTyre implements Tyre{

	@Override
	public void revolve() {
		System.out.println("轮胎磨损慢!");
	}
}

工厂接口及其实现类:

public abstract class CarFactory {
	abstract Engine createEngine();
	abstract Seat createSeat();
	abstract Tyre createTyre();
}
public class LuxuryCarFactory extends CarFactory {
	public Engine createEngine() {
		return new LuxuryEngine();
	}

	public Seat createSeat() {
		return new LuxurySeat();
	}

	public Tyre createTyre() {
		return new LuxuryTyre();
	}
}
public class LowCarFactory extends CarFactory {
	public Engine createEngine() {
		return new LowEngine();
	}

	public Seat createSeat() {
		return new LowSeat();
	}

	public Tyre createTyre() {
		return new LowTyre();
	}
}

测试类:

public class Test1 {
	public static void main(String[] args) {
		CarFactory carFactory = new LowCarFactory();
		Engine e = carFactory.createEngine();
		e.run();
		e.start();
	}
}

测试结果:

跑得慢!
不可自动测停!

工厂模式要点

1、简单工厂模式(静态工厂模式)

虽然某种程度不符合设计原则,但实际使用最多。

2、工厂方法模式

不修改已有类的前提下,通过增加新的工厂类实现扩展。

3、抽象工厂模式

不可以增加产品,可以增加产品族

应用场景

1、JDK中Calendar的getInstance方法

2、JDBC中Connection对象的获取

3、Hibernate中SessionFactory创建Session

4、spring中IOC容器创建管理bean对象

5、XML解析时的DocumentBuilderFactory创建解析器对象

6、反射中Class对象的newInstance()

抽象工厂模式的优点

1、良好的封装性

2、产品族内的约束为非公开状态

抽象工厂模式的缺点

产品族扩展困难。注意是产品族内的产品。

 

下一节  23种设计模式之建造者模式  

 

猜你喜欢

转载自blog.csdn.net/qq_40802448/article/details/88761097