using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MediaPlayerLibrary
{
    public interface IMedia
    {
        void Play();
    }
    public abstract class AudioMedia : IMedia
    {
        public abstract void Play();
    }
    public abstract class VideoMedia : IMedia
    {
        public abstract void Play();
    }

    public class RM : VideoMedia
    {
        public override void Play()
        {
            MessageBox.Show("Play the RM file");
        }
    }
    public class MPEG : VideoMedia
    {
        public override void Play()
        {
            MessageBox.Show("Play the MPEG file");
        }
    }
    public class WAV : AudioMedia
    {
        public override void Play()
        {
            MessageBox.Show("Play the WAV file");
        }
    }
    public class MP3 : AudioMedia
    {
        public override void Play()
        {
            MessageBox.Show("Play the MP3 file");
        }
    }
    //根据不同的状况创建不同类型的方式,工厂模式是最拿手的,现在这里有两种不同的类型的媒体AudioMedia和VideoMedia(以后会更多)
    //但他们同时又都实现IMedia接口,所以我们可以视其为一中产品,用工厂模式就可以了
    //工厂模式的直接好处:并非是要解决Switch语句的难题,而是延迟对象的生成,以保证代码的灵活性
    public interface IMediaFactory
    {
        IMedia CreateMedia();
    }
    public class MP3Factory : IMediaFactory
    {
        public IMedia CreateMedia()
        {
            return new MP3();
        }
    }
    public class RMFactory : IMediaFactory
    {
        public IMedia CreateMedia()
        {
            return new RM();
        }

    }
    public class MPEGFactory : IMediaFactory
    {
        public IMedia CreateMedia()
        {
            return new MPEG();
        }
    }
    public class WAVFactory : IMediaFactory
    {
        public IMedia CreateMedia()
        {
            return new WAV();
        }
    }
    //结论:在调用类对象的属性和方法时,尽量避免将具体类对象作为传递参数,而应该传递其抽象对象,更好地是传递接口
    //将实际的调用和具体对象完全剥离开,这样提高代码的灵活性
    public class MediaPlayer
    {
        public void Player(IMedia media)
        {
            media.Play();
        }
    }  
}
转自:
http://www.cnblogs.com/wayfarer/articles/70453.html

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
  • 2022-12-23
  • 2021-09-03
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-05-18
  • 2021-04-23
  • 2021-11-30
  • 2021-10-29
  • 2021-08-11
  • 2021-07-18
  • 2022-12-23
相关资源
相似解决方案