Это хорошая реализация полиморфизма? - PullRequest
0 голосов
/ 17 июля 2010

Это работает, но хороший ли это пример полиморфизма?

package mtm.test 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;

    public class TestDocument extends MovieClip
    {
        public function TestDocument() 
        {
            var image:Image = new Image();
            image.id = 0;
            image.bitmaps[BitmapFullSize] = new BitmapFullSize(new BitmapData(400, 400, false, 0x000000));
            image.bitmaps[BitmapMediumSize] = new BitmapMediumSize(new BitmapData(250, 250, false, 0x000000));
            image.bitmaps[BitmapThumbnail] = new BitmapThumbnail(new BitmapData(65, 65, false, 0x000000));

            var bmp:BitmapType = image.bitmaps[BitmapFullSize];
            if(bmp != null) addChild(bmp);
        }
    }
}

Вот классы, использованные выше:

package mtm.test 
{
    import flash.display.Bitmap;
    public dynamic class Image extends Object
    {
        public var id:int;
        public var enabled:int;
        public var orderNum:int;
        public var filename:String;
        public var title:String;
        public var description:String;

        public var medExists:int;
        public var fullExists:int;
        public var thumbExists:int;

        public var bitmaps:Object = new Object();
    }
}

Родительский класс BitmapType

package mtm.test 
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    public class BitmapType extends Bitmap
    {
        public function BitmapType(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

Подклассы BitmapType

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapFullSize extends BitmapType 
    { 
        public function BitmapFullSize(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapMediumSize extends BitmapType 
    { 
        public function BitmapMediumSize(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

package mtm.test 
{
    import flash.display.BitmapData;
    public class BitmapThumbnail extends BitmapType 
    {
        public function BitmapThumbnail(bitmapData:BitmapData = null, pixelSnapping:String = 'auto', smoothing:Boolean = false)
        {
            super(bitmapData, pixelSnapping, smoothing);
        }
    }
}

1 Ответ

2 голосов
/ 17 июля 2010

Это не совсем полиморфизм, если дети просто вызывают реализацию своего родителя. Полиморфизм - это если каждый подтип имеет свою реализацию какого-либо метода. Так что если бы у вас был метод Resize(), который использовал разные алгоритмы, основанные на каждом типе, то это был бы полиморфизм.

Ваш код для каждого из трех подтипов идентичен.


Вот классический пример: Базовый класс называется Vehicle
Подклассы: Car, Boat, Airplane.

Каждый из Car, Boat, Airplane будет иметь свой метод Travel.

Тогда вы могли бы сказать:

Vehicle myVehicle = new Boat();
myVehicle.Travel();

Это полиморфизм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...