نموذج الإستراتيجية

يعتبر نموذج الإستراتيجية (نمط الاستراتيجية) (بالإنجليزية: Strategy Pattern)‏ أو (خطة العمل) (The policy pattern) واحداً من أنماط تصميم البرمجيات التصرفية (السلوكية) في مجال هندسة البرمجيات التي وضعها جماعة الأربعة في كتابهم المعروف (نماذج التصميم).[1][2][3] يستعمل هذا النموذج (النمط) بالتحديد كي يتم اختيار الخوارزمية المناسبة أثناء تشغيل البرنامج (بالإنجليزية: runtime )‏. بدلا من تنفيذ خوارزمية واحدة مباشرة، الكود يستقبل التعليمات اثناء التشغيل (بالإنجليزية: run-time)‏ ليحدد الخوارزمية المناسبة لاستخدامها. بعبارة أخرى، فإن هذا النموذج يعرّف عددا من الخوارزميات ويجعلهم مغلفين (بالإنجليزية: encapsulated)‏ بحيث يمكن أن تحل إحداها محل الأخرى.

على سبيل المثال، يمكن تطبيق نموذج الإستراتيجية في حالة صنف (Class) يقوم بعملية التحقق من صحة البيانات المدخلة (بالإنجليزية: validation )‏. حيث يمكن أن يكتب البرنامج بطريقة تجعله يختار الخوارزمية المناسبة تلقائيا بناءً على نوع البيانات المدخلة أو على مصدر هذه البيانات أو على أي عامل آخر. ما يهم هنا هو أن هذا العامل لا تتم معرفته، وبالتالي تحديد الخوارزمية، إلا أثناء تشغيل البرنامج. يمكن استخدام خوارزميات التحقق (الاستراتيجيات)، المغلفة (بالإنجليزية: encapsulated)‏ بشكل منفصل عن كائن التحقق (بالإنجليزية: validating object)‏ ، من قبل كائنات التحقق الأخرى في مجالات مختلفة من النظام (أو حتى أنظمة مختلفة) دون تكرار الكود البرمجي (بالإنجليزية: code duplication)‏. عادة يقوم نمط الإستراتيجية بتخزين عنوان مرجعي (بالإنجليزية: reference)‏ لبعض الكود في بنية بيانات (بالإنجليزية: data structure)‏ ويستردها (بالإنجليزية: retrieves )‏. يمكن تحقيق ذلك من خلال آليات مثل مؤشر الدالة الأصلية (بالإنجليزية: native function pointer)‏ ، أو دالة من الصنف الأول (بالإنجليزية: first-class function)‏ ، أو الاصناف أو مثيلات الصنف (بالإنجليزية: class instances)‏ في لغات البرمجة الكائنية (بالإنجليزية: object-oriented)‏ ، أو الوصول (بالإنجليزية: accessing )‏إلى التخزين الداخلي (بالإنجليزية: internal storage)‏ لتطبيق اللغة (بالإنجليزية: the language implementation)‏ الخاص بالكود عبر الانعكاس (بالإنجليزية: reflection)‏.

هيكل

مخطط الصنف في لغة النمذجة الموحدة (UML) ومخطط التتابع

A sample UML class and sequence diagram for the Strategy design pattern.[4]

.في مخطط الصنف UML (بالإنجليزية: UML class diagram)‏ أعلاه، لا يطبق صنف السياق (بالإنجليزية: Context class)‏ خوارزمية مباشرة. بدلاً من ذلك، يشير السياقContext إلى واجهة الإستراتيجية Strategy interface لتنفيذ خوارزمية (()Strategy.algorithm)، مما يجعل السياقContext مستقلاً عن كيفية تطبيق (بالإنجليزية: implemented)‏ الخوارزمية. صنفا الإستراتيجية Strategy1 (بالإنجليزية: Strategy1)‏ والاستراتيجية 2 (بالإنجليزية: Strategy2)‏ ينفذا (بالإنجليزية: implement)‏ واجهة الإستراتيجية (بالإنجليزية: Strategy interface)‏، أي تنفيذ (تغليف) (بالإنجليزية: implement (encapsulate))‏ خوارزمية. يعرض مخطط التتابع UML (بالإنجليزية: UML sequence diagram)‏ تفاعلات وقت التشغيل (بالإنجليزية: run-time interactions)‏ : يقوم كائن السياق (بالإنجليزية: Context object)‏ بتفويض (بالإنجليزية: delegates)‏ خوارزمية لكائنات إستراتيجية (بالإنجليزية: Strategy objects)‏ مختلفة. أولاً، يستدعيContext السياق خوارزمية ()algorithm على كائن Strategy1 ، الذي ينفذ الخوارزمية ويعيدreturns النتيجة إلى السياقContext. بعد ذلك، يغير السياقContext استراتيجيته ويستدعي ()algorithm على كائن Strategy2 ، الذي ينفذ الخوارزمية ويعيد (بالإنجليزية: returns)‏ النتيجة إلى السياق(بالإنجليزية: Context)‏.

مخطط الفئة

Strategy Pattern in UML

[5]

Strategy pattern in LePUS3 (legend)

مثال

#C

المثال التالي بلغة برمجة سي شارب (بالإنجليزية: #C)‏:

public class StrategyPatternWiki
{
    public static void Main(String[] args)
    {
        // Prepare strategies
        var normalStrategy    = new NormalStrategy();
        var happyHourStrategy = new HappyHourStrategy();

        var firstCustomer = new Customer(normalStrategy);

        // Normal billing
        firstCustomer.Add(1.0, 1);

        // Start Happy Hour
        firstCustomer.Strategy = happyHourStrategy;
        firstCustomer.Add(1.0, 2);

        // New Customer
        Customer secondCustomer = new Customer(happyHourStrategy);
        secondCustomer.Add(0.8, 1);
        // The Customer pays
        firstCustomer.PrintBill();

        // End Happy Hour
        secondCustomer.Strategy = normalStrategy;
        secondCustomer.Add(1.3, 2);
        secondCustomer.Add(2.5, 1);
        secondCustomer.PrintBill();
    }
}

class Customer
{
    private IList<double> drinks;

    // Get/Set Strategy
    public IBillingStrategy Strategy { get; set; }

    public Customer(IBillingStrategy strategy)
    {
        this.drinks = new List<double>();
        this.Strategy = strategy;
    }

    public void Add(double price, int quantity)
    {
        this.drinks.Add(this.Strategy.GetActPrice(price * quantity));
    }

    // Payment of bill
    public void PrintBill()
    {
        double sum = 0;
        foreach (var drinkCost in this.drinks)
        {
            sum += drinkCost;
        }
        Console.WriteLine($"Total due: {sum}.");
        this.drinks.Clear();
    }
}

interface IBillingStrategy
{
    double GetActPrice(double rawPrice);
}

// Normal billing strategy (unchanged price)
class NormalStrategy : IBillingStrategy
{
    public double GetActPrice(double rawPrice) => rawPrice;
}

// Strategy for Happy hour (50% discount)
class HappyHourStrategy : IBillingStrategy
{
    public double GetActPrice(double rawPrice) => rawPrice * 0.5;
}

جافا Java

مثال بلغة برمجة جافا Java

مخطط الصنف UML للمثال
import java.util.ArrayList;

interface BillingStrategy {
    // Use a price in cents to avoid floating point round-off error
    int getActPrice(int rawPrice);
  
    // Normal billing strategy (unchanged price)
    static BillingStrategy normalStrategy() {
        return rawPrice -> rawPrice;
    }
  
    // Strategy for Happy hour (50% discount)
    static BillingStrategy happyHourStrategy() {
        return rawPrice -> rawPrice / 2;
    }
}

class Customer {
    private final List<Integer> drinks = new ArrayList<>();
    private BillingStrategy strategy;

    public Customer(BillingStrategy strategy) {
        this.strategy = strategy;
    }

    public void add(int price, int quantity) {
        this.drinks.add(this.strategy.getActPrice(price*quantity));
    }

    // Payment of bill
    public void printBill() {
        int sum = this.drinks.stream().mapToInt(v -> v).sum();
        System.out.println("Total due: " + sum);
        this.drinks.clear();
    }

    // Set Strategy
    public void setStrategy(BillingStrategy strategy) {
        this.strategy = strategy;
    }
}

public class StrategyPattern {
    public static void main(String[] arguments) {
        // Prepare strategies
        BillingStrategy normalStrategy    = BillingStrategy.normalStrategy();
        BillingStrategy happyHourStrategy = BillingStrategy.happyHourStrategy();

        Customer firstCustomer = new Customer(normalStrategy);

        // Normal billing
        firstCustomer.add(100, 1);

        // Start Happy Hour
        firstCustomer.setStrategy(happyHourStrategy);
        firstCustomer.add(100, 2);

        // New Customer
        Customer secondCustomer = new Customer(happyHourStrategy);
        secondCustomer.add(80, 1);
        // The Customer pays
        firstCustomer.printBill();

        // End Happy Hour
        secondCustomer.setStrategy(normalStrategy);
        secondCustomer.add(130, 2);
        secondCustomer.add(250, 1);
        secondCustomer.printBill();
    }
}

إستراتيجية ومبدأ مفتوح/مغلق

إستراتيجية ومبدأ مفتوح مغلق (بالإنجليزية: Strategy and open/closed principle)‏ وفقًا لنمط الإستراتيجية، لا ينبغي أن تُتوارث (بالإنجليزية: inherited )‏ سلوكيات الصنف (بالإنجليزية: the behaviors of a class)‏ . بدلاً من ذلك، يجب تغليفها (بالإنجليزية: encapsulated)‏ باستخدام الواجهات (بالإنجليزية: interfaces)‏ . هذا متوافق مع مبدأ مفتوح / مغلق (بالإنجليزية: OCP)‏، الذي يقترح أن الأصناف (بالإنجليزية: classes)‏ يجب أن تكون مفتوحة للتمديد (بالإنجليزية: open for extension)‏ ولكن مغلقة للتعديل (بالإنجليزية: closed for modification)‏.

كمثال، ضع في اعتبارك صنف السيارة(بالإنجليزية: car class)‏. وظيفتان محتملتان للسيارة (بالإنجليزية: functionalities )‏ هما الفرملة (بالإنجليزية: brake)‏ والتسارع (بالإنجليزية: accelerate)‏. نظرًا لأن سلوكيات التسارع (بالإنجليزية: accelerate )‏ والفرملة (بالإنجليزية: brake )‏ تتغير بشكل متكرر (بالإنجليزية: frequently)‏ بين النماذج (بالإنجليزية: models)‏، فإن النهج المشترك (بالإنجليزية: common approach)‏ هو تنفيذ (بالإنجليزية: implement )‏ هذه السلوكيات (بالإنجليزية: behaviors )‏ في الأصنف الفرعية (بالإنجليزية: subclasses)‏. هذا النهج (بالإنجليزية: approach )‏ له عيوب كبيرة (بالإنجليزية: significant drawbacks)‏: يجب الإعلان (بالإنجليزية: declared )‏ عن سلوكيات التسارع (بالإنجليزية: accelerate )‏والفرامل (بالإنجليزية: brake)‏ في كل طراز سيارة جديد (بالإنجليزية: new Car model)‏. يزداد عمل إدارة (بالإنجليزية: work of managing)‏ هذه السلوكيات (بالإنجليزية: behaviors )‏ بشكل كبير مع زيادة عدد النماذج (بالإنجليزية: as the number of models increases)‏ ، ويتطلب تكرار الكود (بالإنجليزية: duplicated )‏عبر النماذج (بالإنجليزية: models)‏. بالإضافة إلى ذلك، ليس من السهل تحديد الطبيعة الدقيقة (بالإنجليزية: exact nature)‏ للسلوك (بالإنجليزية: behavior )‏ لكل نموذج (بالإنجليزية: model )‏ دون التحقق من الكود في كل نموذج.

يستخدم نمط الاستراتيجية (بالإنجليزية: strategy pattern)‏ التركيب بدلاً من الوراثة (بالإنجليزية: composition over inheritance)‏. في نمط الاستراتيجية، يتم تعريف السلوكيات (بالإنجليزية: behaviors are defined)‏ على أنها واجهات منفصلة (بالإنجليزية: interfaces )‏ وأصناف محددة (بالإنجليزية: specific classes)‏ تنفذ (بالإنجليزية: implement )‏هذه الواجهات (بالإنجليزية: interfaces)‏. هذا يسمح بفصل (بالإنجليزية: better decoupling)‏ أفضل بين السلوك (بالإنجليزية: behavior )‏ والصنف (بالإنجليزية: class )‏ الذي يستخدم السلوك (بالإنجليزية: )‏. يمكن تغيير السلوك (بالإنجليزية: behavior )‏ دون كسر الاصناف (بالإنجليزية: breaking the classes)‏ التي تستخدمه، ويمكن للأصناف (بالإنجليزية: classes )‏ التبديل بين السلوكيات (بالإنجليزية: switch between behaviors)‏ عن طريق تغيير التنفيذ المحدد (بالإنجليزية: by changing the specific implementation)‏ المستخدم دون الحاجة إلى أي تغييرات كبيرة في الكود (بالإنجليزية: Code)‏. يمكن أيضًا تغيير السلوكيات (بالإنجليزية: Behaviors )‏ في وقت التشغيل (بالإنجليزية: run-time)‏ وكذلك في وقت التصميم (بالإنجليزية: design-time)‏. على سبيل المثال، يمكن تغيير سلوك فرامل كائن السيارة (بالإنجليزية: car object's brake behavior)‏ من دالة الفرملة مع ABS (بالإنجليزية: ()BrakeWithABS)‏ إلى دالة الفرملة (بالإنجليزية: ()Brake )‏ عن طريق تغيير عضو سلوك الفرامل brakeBehavior (بالإنجليزية: by changing the brakeBehavior member )‏ إلى:

brakeBehavior = new Brake();

مثال بلغة جافا Java

/* Encapsulated family of Algorithms
 * Interface and its implementations
 */
public interface IBrakeBehavior {
    public void brake();
}

public class BrakeWithABS implements IBrakeBehavior {
    public void brake() {
        System.out.println("Brake with ABS applied");
    }
}

public class Brake implements IBrakeBehavior {
    public void brake() {
        System.out.println("Simple Brake applied");
    }
}

/* Client that can use the algorithms above interchangeably */
public abstract class Car {
    private IBrakeBehavior brakeBehavior;

    public Car(IBrakeBehavior brakeBehavior) {
      this.brakeBehavior = brakeBehavior;
    }

    public void applyBrake() {
        brakeBehavior.brake();
    }

    public void setBrakeBehavior(IBrakeBehavior brakeType) {
        this.brakeBehavior = brakeType;
    }
}

/* Client 1 uses one algorithm (Brake) in the constructor */
public class Sedan extends Car {
    public Sedan() {
        super(new Brake());
    }
}

/* Client 2 uses another algorithm (BrakeWithABS) in the constructor */
public class SUV extends Car {
    public SUV() {
        super(new BrakeWithABS());
    }
}

/* Using the Car example */
public class CarExample {
    public static void main(final String[] arguments) {
        Car sedanCar = new Sedan();
        sedanCar.applyBrake();  // This will invoke class "Brake"

        Car suvCar = new SUV();
        suvCar.applyBrake();    // This will invoke class "BrakeWithABS"

        // set brake behavior dynamically
        suvCar.setBrakeBehavior( new Brake() );
        suvCar.applyBrake();    // This will invoke class "Brake"
    }
}

مراجع

  1. ^ "The Strategy design pattern - Structure and Collaboration". w3sDesign.com. مؤرشف من الأصل في 2017-08-24. اطلع عليه بتاريخ 2017-08-12.
  2. ^ "The Strategy design pattern - Problem, Solution, and Applicability". w3sDesign.com. مؤرشف من الأصل في 2017-08-13. اطلع عليه بتاريخ 2017-08-12.
  3. ^ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. ص. 315ff. ISBN:0-201-63361-2. مؤرشف من الأصل في 2019-12-15.{{استشهاد بكتاب}}: صيانة الاستشهاد: أسماء متعددة: قائمة المؤلفين (link)
  4. ^ "The Strategy design pattern - Structure and Collaboration". w3sDesign.com. مؤرشف من الأصل في 2017-08-24. اطلع عليه بتاريخ 2017-08-12.
  5. ^ http://www.mcdonaldland.info/2007/11/28/40/ نسخة محفوظة 2020-04-14 على موقع واي باك مشين.

Read other articles:

Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Матер…

Below is a list of governors of Rio Grande do Sul, a federative unit of Brazil. This article includes all those who have governed the territory now called the State of Rio Grande do Sul, from the period of Portuguese colonization to the present day. Throughout its history, Rio Grande do Sul has been governed by captaincy commanders, captains-general, provincial presidents, state presidents and federal interventors, with the current title governor being used recently. The incumbent governor is Ed…

2016年美國總統選舉 ← 2012 2016年11月8日 2020 → 538個選舉人團席位獲勝需270票民意調查投票率55.7%[1][2] ▲ 0.8 %   获提名人 唐納·川普 希拉莉·克林頓 政党 共和黨 民主党 家鄉州 紐約州 紐約州 竞选搭档 迈克·彭斯 蒂姆·凱恩 选举人票 304[3][4][註 1] 227[5] 胜出州/省 30 + 緬-2 20 + DC 民選得票 62,984,828[6] 65,853,514[6] 得…

Sports venue in Tokyo, Japan This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article includes a list of references, related reading, or external links, but its sources remain unclear because it lacks inline citations. Please help improve this article by introducing more precise citations. (November 2019) (Learn how and when to remove this message) You can help expand this article with t…

 烏克蘭總理Прем'єр-міністр України烏克蘭國徽現任杰尼斯·什米加尔自2020年3月4日任命者烏克蘭總統任期總統任命首任維托爾德·福金设立1991年11月后继职位無网站www.kmu.gov.ua/control/en/(英文) 乌克兰 乌克兰政府与政治系列条目 宪法 政府 总统 弗拉基米尔·泽连斯基 總統辦公室 国家安全与国防事务委员会 总统代表(英语:Representatives of the President of Ukraine) 总理…

Questa voce o sezione sull'argomento pallacanestro non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. FIBA OceaniaLogo Disciplina Pallacanestro Fondazione1967 GiurisdizioneOceania Federazioni affiliate22 ConfederazioneFIBA (dal 1967) Sede Gold Coast Presidente Burton Shipley Sito ufficialewww.fibaoceania.co…

SMK Negeri 1 Seputih Surabaya adalah sebuah sekolah menengah kejuruan negeri yang berada di Kabupaten Lampung Tengah, Lampung. SMK Negeri 1 Seputih SurabayaInformasiJenisNegeriAkreditasiBKepala SekolahDrs . Temu, M.PdJurusan atau peminatan Akutansi dan Keuangan Lembaga Teknik Kendaraan Ringan Teknik Dan Bisnis Sepeda Motor Desain Komunikasi Visual Rentang kelasX, XI, XIIKurikulumKurikulum MerdekaAlamatLokasiJln. Raya Gaya Baru III, Seputih Surabaya , Lampung Tengah, Lampung, IndonesiaSurel …

Peste de JustinienSaint Sébastien présenté comme intercesseur lors de la peste de Justinien, par Josse Lieferinxe (Walters Art Museum).Maladie PesteAgent infectieux Yersinia pestisLocalisation Afrique du Nord, Europe et Moyen-OrientDate d'arrivée 541Date de fin 767BilanMorts inconnumodifier - modifier le code - modifier Wikidata La peste de Justinien, dite aussi pestis inguinaria ou pestis glandularia en latin, est la première pandémie connue de peste (les « pestes » précéden…

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (فبراير 2016) الجبهة الشمالية الغربية كانت تشكيلا عسكريا في الجيش الإمبراطوري الروسي خلال الحرب العالمية الأولى.[1] أنشئت في آب / أغسطس 1914. في آب / أغسطس 1915 تم تقسيمه إلى …

DHL Air Boeing 757-236(SF) Boeing 757-200 tahun 2012 DHL Air UK, tergabung dalam DHL Air Ltd., adalah sebuah maskapai penerbangan kargo yang berbasis di Orbital Park, Hounslow, London.[1] Maskapai ini dimiliki sepenuhnya oleh Deutsche Post DHL[2] dan menyedakan layanan pengiriman parsel dan jaringan ekspress bermerek DHL di Eropa. Basis utamanya adalah Bandar Udara East Midlands.[2] DHL Air Ltd. memegang lisensi operasi dari Otoritas Penerbangan Sipil Britania Raya Type A…

Sovereign people redirects here. For the Curaçaoan political party, see Sovereign People. Idea that the people are the source of all power Popular sovereignty is the principle that the leaders of a state and its government are created and sustained by the consent of its people, who are the source of all political legitimacy. Popular sovereignty, being a principle, does not imply any particular political implementation.[a] Benjamin Franklin expressed the concept when he wrote that In fre…

Halaman ini berisi artikel tentang hari unjuk rasa pro-Palestina tahunan. Untuk hari libur nasional Israel, lihat Hari Yerusalem. Hari QudsHari Quds di TehranDirayakan olehIran, dan negara dan komunitas lainJenisIdeologiMaknaUnjuk rasa melawan Zionisme, pemerintahan Israel dan pendudukan Yerusalem; solidaritas dengan bangsa PalestinaMulaiJumat Terakhir dari bulan RamadanFrekuensiTahunanTerkait denganRevolusi IranNasionalisme PalestinaAnti-Zionisme Hari Quds (Hari Yerusalem; Quds adalah nama Arab…

Le regioni dell'Iran (persiano: استان ostān, plurale استان‌ها ostānhā) costituiscono la suddivisione territoriale di primo livello del Paese e sono in tutto trentuno. Ciascuna di esse ha un governo locale, con sede nel rispettivo capoluogo (persiano: مرکز markaz); l'autorità provinciale è il Governatore, nominato dal Ministro degli Interni e approvato dal consiglio dei ministri[1]. Il termine ostān, oltre che con province[2][3], viene a volte trado…

Qatar Under-23Nickname(s)Al-Annabi (The Maroons)AssociationQatar Football AssociationConfederationAFC (Asia)Sub-confederationWAFF (West Asia)Head coachIlídio ValeHome stadiumKhalifa International StadiumJassim bin Hamad StadiumFIFA codeQAT First colours Second colours Olympic GamesAppearances2 (first in 1984)Best resultQuarter-finals (1992)AFC U-23 ChampionshipAppearances5 (first in 2016)Best result Bronze Medal (2018)Asian GamesAppearances5 (first in 2002)Best result Gold Medal (2006) The Qata…

Australian actress Jane Claire AllsopAllsop in 2020BornOxford, EnglandOccupationActressSpouseDavid Serafin (m. 2014)Children4Websitewww.janeallsop.com.au Jane Claire Allsop is an Australian actress, best known for her role as Jo Parrish on Blue Heelers. Personal life Allsop was born in the United Kingdom, and only a few months after her birth moved to the United States with her father, John Allsop and mother, Helen Allsop. When Allsop was two-and-a-half years old, her family settled in Mont Albe…

Pour les articles homonymes, voir Légion étrangère (homonymie) et Légion. Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article n’est pas rédigé dans un style encyclopédique (mars 2022). Vous pouvez améliorer sa rédaction ! Légion étrangère Grenade à sept flammes, emblème de la légion étrangère Création 10 mars 1831 Pays France Branche Armée de terre française Rôle Troupe d'assaut Effectif 9 000[1] Couleurs Vert et rouge Dev…

King of Sweden from 1216 to 1222 Johan Sverkersson redirects here. For the son of King Sverker I, see John, Prince of Sweden (12th century). John ICoin issued by King John IKing of SwedenReign1216 – 10 March 1222PredecessorEric XSuccessorEric XIBornc. 1201Died10 March 1222Visingsö, SwedenHouseSverkerFatherSverker II of SwedenMotherIngegerd Birgersdotter John I (Swedish: Johan Sverkersson; c. 1201 – 10 March 1222) was King of Sweden from 1216 until his death in 1222.[1] Background Jo…

Suzuki GSX-RRPabrikanSuzukiProduksisejak 2014PendahuluSuzuki GSV-RTipeMotoGPMesin1.000 cc (61 cu in) empat tak I4Transmisi6-kecepatanTipe bingkaiAluminium spar gandaJarak sumbu roda1.457 mm (57,4 in)DimensiL: 2.096 mm (82,5 in) W: 720 mm (28,3 in) H: 1.140 mm (44,9 in)Berat160 kg (dry)Kapasitas tangki22 liter Suzuki GSX-RR adalah sepeda motor yang dikembangkan untuk balapan di seri MotoGP 1.000 cc (61 cu in). Resmi diperk…

American singer and actress (1963–2012) For the album, see Whitney Houston (album). Not to be confused with Whitney Chewston. Whitney HoustonHouston at the Welcome Home Heroes concert in 1991BornWhitney Elizabeth Houston(1963-08-09)August 9, 1963Newark, New Jersey, U.S.DiedFebruary 11, 2012(2012-02-11) (aged 48)Beverly Hills, California, U.S.Burial placeFairview Cemetery, Westfield, New JerseyEducationMount Saint Dominic AcademyOccupationsSingeractressmodelfilm producerrecord producerphil…

Questa voce sull'argomento calciatori inglesi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Elliot ParishNazionalità Inghilterra Altezza188 cm Peso83 kg Calcio RuoloPortiere Squadra svincolato CarrieraGiovanili  Aston Villa Squadre di club1 2011→  Lincoln City9 (-23)2011-2012 Cardiff City0 (0)2012→  Wycombe2 (-4)2012-2013 Cardiff City0 (0)2013-2014 Bristol City19 (…