设计模式学习六:抽象工厂模式

一.概念

     抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确知道具体类。

二.实例分析

     CPU

package com.zzy.abstractFactory;
/**
 * CPU接口
 * @author eason
 *
 */
public interface CPU {
	public void work();
}

     WDCPU/SamSungCPU/SeagateCPU类似,只贴出一个

package com.zzy.abstractFactory;
/**
 * 西数CPU
 * @author eason
 *
 */
public class WDCPU implements CPU{

	@Override
	public void work() {
		System.out.println("西数CPU is working...");
	}

}

     Disk

package com.zzy.abstractFactory;
/**
 * CPU接口
 * @author eason
 *
 */
public interface Disk {
	public void write();
}

     WDDisk/SamSungDisk/SeagateDisk类似,只贴出一个

package com.zzy.abstractFactory;

public class WDDisk implements Disk {

	@Override
	public void write() {
		System.out.println("西数硬盘 is working...");
	}

}

     AbstractFactory

package com.zzy.abstractFactory;
/**
 * 抽象工厂接口
 * @author eason
 *
 */
public interface AbstractFactory {
	public CPU createCPU();
	public Disk createDisk();
}
 

     WDFactory/SamSungFactory/SamSungFactory类似,只贴出一个

package com.zzy.abstractFactory;
/**
 * 三星工厂
 * @author eason
 *
 */
public class WDFactory implements AbstractFactory{

	@Override
	public CPU createCPU() {
		return new WDCPU();
	}

	@Override
	public Disk createDisk() {
		return new SamSungDisk();
	}
}

     TestAbstractFactory

package com.zzy.abstractFactory;
/**
 * 测试类
 * @author eason
 *
 */
public class TestAbstractFactory {
	public static void main(String[] args) {
		//三星工厂
		AbstractFactory factory = new WDFactory();
		//三星工厂生产的CPU
		CPU cpu = factory.createCPU();
		//三星工厂生产的硬盘
		Disk disk = factory.createDisk();
		cpu.work();
		disk.write();
	}
}
 

三.抽象工厂模式的产品等级与产品族

  1. 抽象工厂:用来生产不同产品族的全部产品。
  2. 抽象工厂是应对产品族概念的,所以抽象工厂接口要能生产同一产品族中的所有产品。

四.简单工厂,工厂方法,抽象工厂的联系去区别

  • 从类的角度

          简单工厂:只有一个具体工厂类来创建一种基类的不同派生类。

          工厂方法:有多个派生于一个基类的具体工厂类,每个工厂类只生产一种基类的一个派生类。

          抽象工厂:只有一个工厂基类,其具体派生类生产相关基类的各一个派生类。

  • 从产品等级与产品族的角度

          简单工厂:生产同一等级结构中的任意产品。

          工厂方法:生产同一等级结构中的固定产品。

          抽象工厂:生产不同产品族的全部产品。

猜你喜欢

转载自zy19982004.iteye.com/blog/1409584