Homlokzat programtervezési minta

From Wikipedia, the free encyclopedia

Remove ads

A homlokzat programtervezési minta az objektumorientált programozásban egy gyakran használt programtervezési minta. Az elnevezés a építészetbeli homlokzat analógiáján alapul.

A homlokzat egy objektum, amely egy leegyszerűsített interfészt biztosít nagyobb kódrészhez, mint pl. egy osztálykönyvtár.

A homlokzat képes:

  • egy szoftverkönyvtár használatát, megértését és tesztelését megkönnyíteni, habár a homlokzat kényelmes módszer általános feladatokra
  • egy könyvtárat olvashatóbbá tenni, ugyanazon okok miatt
  • csökkenteni a külső kód függőségeit a belső könyvtári munkáktól, habár a legtöbb kód használja a homlokzatot, amely nagyobb rugalmasságot biztosít a rendszer fejlesztésekor
  • becsomagolja a gyengén tervezett APIk gyűjteményét egy leegyszerűsített jól tervezett API-ba (feladatonként szükséges módon)
Remove ads

Használata

A Homlokzatot akkor használják, amikor valaki egy könnyebb vagy leegyszerűsített interfészt szeretne egy alatta lévő megvalósítási objektumhoz.[1] Máskor az adapter használható, ha a becsomagolónak figyelnie kell egy kitüntetett interfészre, és támogatnia kell a többalakú viselkedést. A díszítő lehetővé teszi, hogy hozzáadjunk, vagy módosítsuk egy interfész viselkedését futás időben.

További információk Minta, Leírás ...

Homlokzatot használnak, ha:

  • le kell egyszerűsíteni a hozzáférést egy komplex rendszerhez
  • a rendszer nagyon bonyolult vagy nehezen elérhető
  • a rétegzett szoftver minden egyes rétegéhez kell belépési pont
  • az absztrakciók és az implementációk között törékeny összefüggés van
Remove ads

Struktúra

  • Csomagok (angolul packages): Egymástól függetlenül tervezett programcsomagok, amiket egy egységes rendszerben kell használni.
  • Homlokzat (angolul facade): A homlokzat osztály az 1-es, 2-es és 3-as csomagok egy absztrakcióját nyújtja, és elválasztja ezeket az alkalmazás többi részéből.
  • Ügyfelek (angolul clients): Az objektumok a Homlokzat mintát használják az erőforrások a csomagokból való eléréséhez.

Thumb

Remove ads

Példák

Absztrakt példa arra, hogy a kliens ("te") hogy tud használni egy homlokzat ("számítógép") segítségével egy bonyolult rendszert (belső számítógép részek, mint pl. a processzor v. a merevlemezek).

Java

/* Bonyolult részek */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Homlokzat */

class Computer {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public Computer() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Ügyfél */

class You {
    public static void main(String[] args) {
        Computer facade = new Computer();
        facade.start();
    }
}

Ruby

# Bonyolult részek

class CPU
  def freeze; end
  def jump(position); end
  def execute; end
end

class Memory
  def load(position, data); end
end

class HardDrive
  def read(lba, size); end
end

# Homlokzat

class ComputerFacade

  def initialize
    @processor = CPU.new
    @ram = Memory.new
    @hd = HardDrive.new
  end

  def start
    @processor.freeze
    @ram.load(BOOT_ADDRESS, @hd.read(BOOT_SECTOR, SECTOR_SIZE))
    @processor.jump(BOOT_ADDRESS)
    @processor.execute
  end
end

# Kliens

computer_facade = ComputerFacade.new
computer_facade.start

C#

További példák C#-ban:

Absztrakt minta

namespace DesignPattern.Facade
{
    class SubsystemA
    {
        public string OperationA1()
        {
            return "Subsystem A, Method A1\n";
        }
        public string OperationA2()
        {
            return "Subsystem A, Method A2\n";
        }
    }

    class SubsystemB
    {
        public string OperationB1()
        {
            return "Subsystem B, Method B1\n";
        }

        public string OperationB2()
        {
            return "Subsystem B, Method B2\n";
        }
    }

    class SubsystemC
    {
        public string OperationC1()
        {
            return "Subsystem C, Method C1\n";
        }

        public string OperationC2()
        {
            return "Subsystem C, Method C2\n";
        }
    }

    public class Facade
    {
        private readonly SubsystemA a = new SubsystemA();
        private readonly SubsystemB b = new SubsystemB();
        private readonly SubsystemC c = new SubsystemC();
        public void Operation1()
        {
            Console.WriteLine("Operation 1\n" +
                a.OperationA1() +
                b.OperationB1() +
                c.OperationC1());
        }
        public void Operation2()
        {
            Console.WriteLine("Operation 2\n" +
                a.OperationA2() +
                b.OperationB2() +
                c.OperationC2());
        }
    }
}

Példa kód

namespace DesignPattern.Facade.Sample
{
    // The 'Subsystem ClassA' class
    class CarModel
    {
        public void SetModel()
        {
            Console.WriteLine(" CarModel - SetModel");
        }
    }

    /// <summary>
    /// The 'Subsystem ClassB' class
    /// </summary>
    class CarEngine
    {
        public void SetEngine()
        {
            Console.WriteLine(" CarEngine - SetEngine");
        }
    }

    // The 'Subsystem ClassC' class
    class CarBody
    {
        public void SetBody()
        {
            Console.WriteLine(" CarBody - SetBody");
        }
    }

    // The 'Subsystem ClassD' class
    class CarAccessories
    {
        public void SetAccessories()
        {
            Console.WriteLine(" CarAccessories - SetAccessories");
        }
    }

    // The 'Facade' class
    public class CarFacade
    {
        private readonly CarAccessories accessories;
        private readonly CarBody body;
        private readonly CarEngine engine;
        private readonly CarModel model;

        public CarFacade()
        {
            accessories = new CarAccessories();
            body = new CarBody();
            engine = new CarEngine();
            model = new CarModel();
        }

        public void CreateCompleteCar()
        {
            Console.WriteLine("******** Creating a Car **********");
            model.SetModel();
            engine.SetEngine();
            body.SetBody();
            accessories.SetAccessories();

            Console.WriteLine("******** Car creation is completed. **********");
        }
    }

    // Facade pattern demo
    class Program
    {
        static void Main(string[] args)
        {
            var facade = new CarFacade();

            facade.CreateCompleteCar();

            Console.ReadKey();
        }
    }
}
Remove ads

Jegyzetek

További információk

Fordítás

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads