这是抽象工厂么?

07-01-19 choumao
    

abstract class Factory {

	public abstract VideoMpeg createVideoMpeg();
	public abstract VideoRm createVideoRm();
	public abstract AudioMp3 createAudioMp3();
	public abstract AudioWav createAudioWav();
}

class ProduceFactory extends Factory {

	public VideoMpeg createVideoMpeg() {
		return new VideoMpeg();
	}

	public VideoRm	createVideoRm() {
		return new VideoRm();
	}
	
	public AudioMp3 createAudioMp3() {
		return new AudioMp3();
	}

	public AudioWav createAudioWav() {
		return new AudioWav();
	}

}

class AudioMp3 {

	public AudioMp3() {
		// TODO: 在此处添加构造函数逻辑	
	}

	public void play() {
		System.out.println("this is mp3 play...");
	}
}

class AudioWav {

	public AudioWav() {
		// TODO: 在此处添加构造函数逻辑	
	}

	public void play() {
		System.out.println("this is wav play...");
	}
}

class VideoRm {

	public VideoRm() {
		// TODO: 在此处添加构造函数逻辑	
	}

	public void play() {
		System.out.println("this is rm play...");
	}
}

class VideoMpeg {

	public VideoMpeg() {
		// TODO: 在此处添加构造函数逻辑	
	}

	public void play() {
		System.out.println("this is mpeg play...");
	}
}

public class AbstractFactory {

	public static void main(String[] args) {
		
		Factory _factory = new ProduceFactory();
		
		AudioMp3 _mp3 = _factory.createAudioMp3();
		VideoRm  _rm  = _factory.createVideoRm();

		_mp3.play();
		_rm.play();
	}
}
<p>

看了抽象工厂的概念,写了一段代码,不知道写对了没有。请赐教谢谢 :)

    

choumao
2007-01-20 18:17

哪位高手帮看看呗。自己顶一下。别沉了

choumao
2007-01-22 09:51

帖子都贴了好几天了,怎么没人解释一下啊。

banq
2007-01-22 15:11

差不多是了

如果将

VideoMpeg和 VideoRm 抽象为Video接口。

将AudioMp3 AudioWav抽象为Audio接口

则更标准

你的Factory实现非常简单。

其实简单工厂和抽象工厂没有必要刻意区分,简单的工厂方法复杂了,自然就可能会成为抽象工厂,抽象工厂一般产品抽象有多个,相应的工厂实现也会有多个。