JavaRush /Blog Jawa /Random-JV /Strategi Cithakan (Strategi)

Strategi Cithakan (Strategi)

Diterbitake ing grup
Pola Strategy nemtokake kulawarga algoritma, encapsulates saben mau, lan mesthekake yen padha bisa diijolke. Iki ngidini algoritma bisa diowahi kanthi bebas saka panggunaan ing sisih klien (definisi iki dijupuk saka buku "Kepala Pisanan. Pola Desain "dening Eric Freeman lan Elizabeth Robson). Dhéfinisi iki katon rada mbingungake, mula kita kudu njlentrehake definisi iki kanthi luwih rinci ing basa normal . Diwiwiti karo agama :) Ana akeh agama ing donya (ngaku, gerakan, kapercayan, lsp). Carane kita bisa njlèntrèhaké iki ing kode. Contone, kita bisa njupuk kelas Agama lan entuk warisan agama liya. Ayo abstraksi barang sing ora perlu lan gunakake metode siji pracaya () ing kelas Agama.
public abstract class Religion {
    public void believe() {
        System.out.println("Я верю в Бога-творца этого мира");
    }
}
Kabeh agama liyane bisa diwarisake saka kelas iki. Yen kita wis mbatesi awake dhewe kanggo Kristen lan malah Islam lan Yahudi, mesthi ora ana masalah.
public class Judaism extends Religion {
}
public class Islam extends Religion {
}
public class Christianity extends Religion {
}
Nanging yen sampeyan mikir babagan agama liyane sing ana saiki (utawa wis ana sadurunge, nanging wis ilang), banjur masalah bakal muncul, paling ora karo Buddha. Sampeyan kudu ngilangi metode sing dipercaya.
public class Buddhism extends Religion {
    @Override
    public void believe() {
        System.out.println("Есть Бог or боги or нет, это не важно, главное достичь нирваны :)");
    };
}
Lan amarga ana akeh agama lan malah pracaya ing monster pasta (Pastafarianism), banjur ing kabeh agama iki sampeyan kudu redefine cara pracaya. Nanging kita bisa nindakake iku beda, mindhah cara iki kanggo antarmuka Iman lan ngleksanakake cara pracaya ing lan ngleksanakake cara iki ing saben kelas (lan patut ngleksanakake ing saben kelas kita pengin)? Nanging banjur kita bakal njaluk duplikasi kode, uga, ing paling antarane wong Yahudi lan Kristen. Muslim Allah bisa nulis ing Arab.
public interface Faith {
    public void believe();
}
public class Christianity implements Faith {
    @Override
    public void believe() {
        System.out.println("Я верю в Бога-творца этого мира");
    }
}
public class Judaism implements Faith {
    @Override
    public void believe() {
        System.out.println("Я верю в Бога-творца этого мира");
    }
}
Ngleksanakake metode standar ora bakal mbantu akeh ing kene; ana akeh agama sing sanajan sampeyan nemtokake metode iki kanthi standar ing antarmuka Iman, sampeyan kudu ngetrapake metode iki kanthi cara sampeyan dhewe ing kabeh agama non-monotheistik, lan mbaleni maneh. nang endi wae. Apa pola Strategy kurban kita ing kasus iki: nawakake kanggo nggawe kelas cithakan siap-digawe kanggo antarmuka saiki, kang banjur bakal diganti menyang konstruktor agama tartamtu. Sing. netepake lan nggawe kulawarga padha algoritma sing kasebut ing awal definisi.
public interface Faith {
    public void believe();
}
public class AbrahamicReligion implements Faith {
    @Override
    public void believe() {
        System.out.println("Я верю в Бога-творца этого мира");
    }
}
public class BuddismReligion implements Faith {
    @Override
    public void believe() {
        System.out.println("Есть Бог or боги or нет, это не важно, главное достичь нирваны :)");
    }
}
public class JediismReligion implements Faith {
    @Override
    public void believe() {
        System.out.println("Да пребудет с вами Сила!");
    }
}
Lan ing saben kelas ing konstruktor, ngganti.
public abstract class Religion {
    Faith faith;
}
public class Judaism extends Religion{

    public Judaism() {
        this.faith = new AbrahamicReligion();
    }
}
public class Christianity extends Religion{

    public Christianity() {
        this.faith = new AbrahamicReligion();
    }
}
public class Buddhism extends Religion {

    public Buddhism() {
        this.faith = new BuddismReligion();
    }
}
Dadi, yen sampeyan kudu nglebokake agama liya ing proyek sampeyan, sampeyan ora kudu nemtokake maneh metode percaya kanggo kabeh kelas utawa bagean saka kelas. Lan sampeyan mung kudu ngleksanakake kelas ilang (yen wis ora ana) sing ngleksanakake antarmuka Iman lan nambah kelas iki ing konstruktor agama anyar.
public class PastafarianismReligion implements Faith{

    @Override
    public void believe() {
        System.out.println("Кто съел мои макароны???");
    }
}
public class Pastafarianism extends Religion {

    public Pastafarianism() {
        this.faith = new PastafarianismReligion();
    }
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION