ืฉืืื! ืืืจืฆืืืช ืงืืืืืช ืืืจ ื ืชืงืื ื ืืืืฉื ืืื ืืื "ืืคืืก ืขืืฆืืื". ืืืงืจื ืฉืฉืืืช, ื ืืืืจ ืื: ืืื ื ืื ืืฆืืื ืคืชืจืื ืกืื ืืจืื ืืกืืื ืืืขืื ื ืคืืฆื ืืชืื ืืช.
ื-JavaRush ืื ื ืืืืจืื ืืขืชืื ืงืจืืืืช ืฉื ืืชื ืืืคืฉ ืืืืื ืืช ืืชืฉืืื ืืืขื ืืื ืฉืืื. ืืื, ืืืฉืื ืื ืจืื ืืืจ ืคืชืจ ืืืฆืืื ืืขืื ืืืื ืืฉืื. ืื, ืืคืืกืื ืื ืคืชืจืื ืืช ืฉื ืืืงื ืืืื ืืื ืืกืื ืชืจืืื ืืืขืืืช ืื ืฉืืืืช ื ืคืืฆืืช ืืืืชืจ ืืคืชืจืื ืืฆืื ืืขืื. ืืื ืื ืืืชื "ืืืคื ืืื" ืฉืืฉืื ืืงืจื ืื ืฆืจืื ืืืืฆืื ืืขืฆืื, ืืื ืฆืจืื ืืืขืช ืืื ืืืชื ืืืืฉื ืืืชื :) ืืฉืืื ื ืืกืคืช ืฉื ืืคืืกืื ืืื ืืืืื ืืช ืืืืจืืืืืช ืืกืื ืืจื ืืื. ืงืจืืืช ืงืื ืฉื ืืืฉืื ืืืจ ืืื ื ืืฉืืื ืงืื! ืื ืืื ืืืชื ืืช ืื ืืืจืช, ืื ืืช ืืืชื ืืขืื ืืคืฉืจ ืืคืชืืจ ืืืจืืื ืจืืืช. ืืื ืืฉืืืืฉ ืืชืื ืืืช ืืืคืฉืจ ืืืชืื ืชืื ืฉืื ืื ืืืืื ืืช ืืืืืืื ืฉื ืืชืืื ืืช ืืืื ืืืชืขืืง ืืื ืฉืืจืช ืงืื (ืื ืื ืื ืจืืืื ืืืชื ืืคืขื ืืจืืฉืื ื!) ืืืื ื ืกืชืื ืขื ืืืช ืืชืื ืืืช ืื ืคืืฆืืช ืืืืชืจ ืฉื ืงืจืืืช "ืืกืืจืืืื".
ืืืื ื ืืืืื ืฉืื ืื ื ืืืชืืื ืชืืื ืืช ืฉืคืืขืืช ืืืืคื ืคืขืื ืขื ืืืืืืงื ืืืืื ืืช. ืืืงืจื ืื, ืื ืืคืืื ืื ืืฉืื ืืืืืื ืื ืืืืืง ืืชืืื ืืช ืฉืื ื ืขืืฉื. ืืฉื ืื, ืืฆืจื ื ืืขืจืืช ืืจืืฉื ืขื ืืืชืช ืืืจื ืืืช
ืืืืื ื ืืช ืืฉืคืืช ืืืืืืจืืชืืื ืฉืืขื ืืื ืื ืืืชื ื (ืกืืื ืืืื ืืืช ืชืืืืง) ืืืืฉืงืื ื ืคืจืืื ืขื ืืกืคืจ ืืืฉืืืื. ืืคืจืื ื ืืืชื ืืืืืืช ืฉื ืืืืื ืืช. ืืื, ืืขืช, ืื ื ืฆืืจื ืืืฆืข ืฉืื ืืืื ืืืฉืื ืืชืืืื ืืชืืืืง ืืื ืื ืืืจ, ืื ืื ืืฉืคืืข ืขื ืกืื ืืืืื ืืืช ืฉืื ื ืืฉืื ืฆืืจื. ืืืฉืจ ืืืืืคื, ืืื ืืืฉืื ืืืชื ืื ืื ื ืจืง ืฆืจืืืื ืืืืกืืฃ ืฉืืืช ืืืืืจ ืืืช ืืืืชื ืฉืื ื
![ืืคืืก ืขืืฆืื "ืืกืืจืืืื" - 2](https://cdn.javarush.com/images/article/d36666bd-a280-4878-8d6f-ab5cff873cdd/800.jpeg)
Auto
ืืฉืืืฉ ืืืชืืช ืืืืื: Sedan
, Truck
ื F1Car
.
public class Auto {
public void gas() {
System.out.println("ะะดะตะผ ะฒะฟะตัะตะด");
}
public void stop() {
System.out.println("ะขะพัะผะพะทะธะผ!");
}
}
public class Sedan extends Auto {
}
public class Truck extends Auto {
}
public class F1Car extends Auto {
}
ืื ืฉืืืฉ ืืืชืืช ืืืืืื ืืืจืฉืืช ืฉืชื ืฉืืืืช ืกืื ืืจืืืืช ืืืืืจื - gas()
ืืืชืืื ืืช stop()
ืฉืื ื ืคืฉืืื ืืืื: ืืืื ืืืช ืืืืืืช ืจืง ืื ืกืืข ืงืืืื ืืืืืื. ืืืืฉื ืขืืืืชื ื, ืืืืื ื ืืืืกืืฃ ืฉืืื ืืืฉื ืืืืื ืืืช - fill()
(ืชืืืืง). ืืืื ื ืืกืืฃ ืืช ืื ืืืืืงืช ืืื Auto
:
public class Auto {
public void gas() {
System.out.println("ะะดะตะผ ะฒะฟะตัะตะด");
}
public void stop() {
System.out.println("ะขะพัะผะพะทะธะผ!");
}
public void fill() {
System.out.println("ะะฐะฟัะฐะฒะธัั ะฑะตะฝะทะธะฝ!");
}
}
ื ืจืื ืฉืขืืืืืช ืืืชืขืืจืจ ืืขืืืช ืืืฆื ืื ืื ืคืฉืื? ืืืื, ืืืขืฉื, ืื ืืืจ ืงืื... ![ืืคืืก ืขืืฆืื "ืืกืืจืืืื" - 3](https://cdn.javarush.com/images/article/a4a7d554-f812-47f0-8652-6d958446528d/800.jpeg)
public class ChildrenBuggies extends Auto {
public void fill() {
//ั
ะผ... ะญัะพ ะดะตััะบะธะน ะฑะฐะณะณะธ, ะตะณะพ ะฝะต ะฝะฐะดะพ ะทะฐะฟัะฐะฒะปััั :/
}
}
ืืชืืื ืืช ืฉืื ื ืืืคืืขื ืืืื ืืช ืฉืื ืืชืืืื ืืงืื ืกืคื ืืืืื - ืืจืืจื ืืืืืื. ืืืื ืืืืืช ืฉืืื ืืืคืขื ืืืืฆืขืืช ืืืืฉื ืื ืืฉืืืื ืจืืื, ืืื ืืืจ ืืื ืืืื - ืืื ืืืคื ืืืื ืืก ืืชืืื ืื ืืื. ืกืืืืช ืืืจืืฉื ืฉืื ื ืืืืื ืืื ืฉืื ื ืืืืงืื ืฉืืืืช ื ืคืืฆืืช ืืคืืื ืืืืืงืืช ืฉืืื ื ืืงืืงืืช ืืื. ืื ืขืืื ื ืืขืฉืืช ืืืฆื ืืื? ืืืื, ืืืฉื, ืืชื ืืืื ืืขืงืืฃ ืืช ืืฉืืื fill()
ืืืืชื ChildrenBuggies
ืื ืฉืืืฉืจ ืืชื ืื ืกื ืืชืืืง ืืช ืืืืื, ืฉืื ืืืจ ืื ืงืืจื:
public class ChildrenBuggies extends Auto {
@Override
public void fill() {
System.out.println("ะะณัััะตัะฝัั ะผะฐัะธะฝั ะฝะตะปัะทั ะทะฐะฟัะฐะฒะธัั!");
}
}
ืืื ืคืชืจืื ืื ืืงืืฉื ืืืื ืืืืงืจื ืืืฆืื, ืืคืืืช ืืืื ืฉืืคืื ืงืื. ืืืืืื, ืจืื ืืืืืงืืช ืืฉืชืืฉื ืืฉืืื ืืืืืงืช ืืื, ืื ืืืืงืืช ืืืจืืช ืืืืืฆื ืืขืงืืฃ ืืืชื. ืื ืืฉ ืื ื 15 ืืืืงืืช, ืื-5-6 ื ืืืฅ ืืขืงืืฃ ืืช ืืืชื ืืืืช, ืฉืืคืื ืืงืื ืืืคืื ื ืจืื ืืืื. ืืืื ืืืฉืงืื ืืืืืื ืืขืืืจ ืื ื? ืืืืืื, ืื:
public interface Fillable {
public void fill();
}
ื ืืฆืืจ ืืืฉืง Fillable
ืืฉืืื ืืืช fill()
. ืืืชืื ืืื, ืืืชื ืืืื ืืืช ืฉืฆืจืื ืืชืืืง ืืืฉืื ืืืฉืง ืื, ืื ืืืื ืืืช ืืืจืืช (ืืืฉื, ืืืืื ืฉืื ื) ืื. ืืื ืื ืืืืคืฆืื ืืื ืื ืชืชืืื ืื ื. ืืืืจืจืืื ืืืขืืืืช ืฉืื ื ืขืฉืืื ืืืืื ืืืกืคืจ ืืืื ืืืื ืืขืชืื (ืชืืจื ืืขืฆืืื ืืื ืกืืืื ืฉืื ืื ืฉื ืืืื ืืืช ืืฉ ืืขืืื). ื ืืฉื ื ืืช ืืคืฉืจืืช ืืืจืืฉื ืืงืืืืช ืื ืื ืจืฆืื ื ืืขืงืืฃ ืืช ื- fill()
. ืืื ื ืฆืืจื ืืืืฉื ืืช ืื ืืื ืฉืืขืืจ! ืื ืื ืืฉ ืื ื 50 ืืื? ืืื ืืืืฆืขื ืฉืื ืืืื ืชืืืคืื ืืชืืื ืืช ืฉืื ื (ืืืชืืื ืืืช ืืืืชืืืช ืื ืืืขื ืชืืื ืืงืจื!), ื ืฆืืจื ืืืชืจืืฆืฅ ืขื ืืืฉืื ืฉืื ื ืืืื ืืื ืื 50 ืืฉืืขืืจืื ืืืฉื ืืช ืืช ืืืชื ืืืืช ืฉื ืื ืืื ืืื ืืืืคื ืืื ื. ืื ืื ืขืืื ื ืืขืฉืืช ืืกืืคื ืฉื ืืืจ? ืืื ืืคืชืืจ ืืช ืืืขืื ืฉืื ื, ืืืื ื ืืืจ ืืืจื ืืืจืช. ืืืืืจ, ืืืื ื ืคืจืื ืืช ืืชื ืืืืช ืืืืชื ืฉืื ื ืืืืืชื ืขืฆืื. ืื ืื ืืืืจ? ืืืืืข, ืืื ืืืืืืงื ืืฉ ืืฆื (ืกื ืฉื ื ืชืื ืื) ืืืชื ืืืืช (ืกื ืฉื ืฉืืืืช). ืืืชื ืืืืช ืฉื ืืืืงืช ืืืืื ื ืฉืื ื ืืืจืืืช ืืฉืืืฉ ืฉืืืืช - gas()
, stop()
ื fill()
. ืฉืชื ืืฉืืืืช ืืจืืฉืื ืืช ืืกืืจ. ืืื ื ืขืืืจ ืืช ืืฉืืื ืืฉืืืฉืืช ืืืืฅ ืืืืชื Auto
. ืื ืชืืื ืืคืจืืช ืืืชื ืืืืช ืืืืืชื (ืืืชืจ ืืืืง, ืื ืื ื ืืคืจืืืื ืจืง ืืืง ืืืืชื ืืืืช - ืฉืชื ืืฉืืืืช ืืจืืฉืื ืืช ื ืฉืืจืืช ืืืงืืื). ืืื ืขืืื ื ืืืขืืืจ ืืช ืืฉืืื ืฉืื ื fill()
? ืฉืื ืืืจ ืื ืขืืื ืืื ืืจืืฉ :/ ื ืจืื ืืื ืฉืืื ืืืืจื ืืืงืืื. ื ืขืืืจ ืืืชื ืืืืฉืง ื ืคืจื - FillStrategy
!
public interface FillStrategy {
public void fill();
}
ืืื ืื ืื ื ืฆืจืืืื ืืช ืืืืฉืง ืืื? ืื ืคืฉืื. ืืขืช ื ืืื ืืืฆืืจ ืืกืคืจ ืืืืงืืช ืฉืืืืืขื ืืช ืืืืฉืง ืืื:
public class HybridFillStrategy implements FillStrategy {
@Override
public void fill() {
System.out.println("ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝะพะผ or ัะปะตะบััะธัะตััะฒะพะผ ะฝะฐ ะฒัะฑะพั!");
}
}
public class F1PitstopStrategy implements FillStrategy {
@Override
public void fill() {
System.out.println("ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ ัะพะปัะบะพ ะฟะพัะปะต ะฒัะตั
ะพััะฐะปัะฝัั
procedures ะฟะธั-ััะพะฟะฐ!");
}
}
public class StandartFillStrategy implements FillStrategy {
@Override
public void fill() {
System.out.println("ะัะพััะพ ะทะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ!");
}
}
ืืฆืจื ื ืฉืืืฉ ืืกืืจืืืืืช ืืชื ืืืืช - ืืืืื ืืืช ืงืื ืื ืฆืืื ืืืืช, ืืืืื ืืืช ืืืืจืืืืืช ืืืืืื ืืืช ืคืืจืืืื 1. ืื ืืกืืจืืืื ืืืืฉืืช ืืืืืจืืชื ืชืืืืง ื ืคืจื. ืืืงืจื ืฉืื ื, ืื ืจืง ืคืื ืืงืื ืกืืื, ืืื ืืืื ืืืืืช ืฉืืฉ ืืืืืื ืืืจืื ืืชืื ืืฉืืื. ืื ืขืืื ื ืืขืฉืืช ืขื ืื ืืืื?
public class Auto {
FillStrategy fillStrategy;
public void fill() {
fillStrategy.fill();
}
public void gas() {
System.out.println("ะะดะตะผ ะฒะฟะตัะตะด");
}
public void stop() {
System.out.println("ะขะพัะผะพะทะธะผ!");
}
}
ืื ื ืืฉืชืืฉืื ืืืืฉืง ืฉืื ื FillStrategy
ืืฉืื ืืืืชื ืืื Auto
. ืฉืืื ืื: ืื ืื ื ืื ืืฆืืื ืื ืืืฉืื ืกืคืฆืืคื, ืืื ืืฉืชืืฉืื ืืืืฉืง. ืื ืฆืืจื ืืืืขืืช ืกืคืฆืืคืืืช ืฉื ืืืืฉืง FillStrategy
ืืืืชืืช ืจืื ืืืืื:
public class F1Car extends Auto {
public F1Car() {
this.fillStrategy = new F1PitstopStrategy();
}
}
public class HybridAuto extends Auto {
public HybridAuto() {
this.fillStrategy = new HybridFillStrategy();
}
}
public class Sedan extends Auto {
public Sedan() {
this.fillStrategy = new StandartFillStrategy();
}
}
ืืื ื ืจืื ืื ืงืืืื ื:
public class Main {
public static void main(String[] args) {
Auto sedan = new Sedan();
Auto hybrid = new HybridAuto();
Auto f1car = new F1Car();
sedan.fill();
hybrid.fill();
f1car.fill();
}
}
ืคืื ืืกืืฃ:
ะัะพััะพ ะทะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ!
ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝะพะผ or ัะปะตะบััะธัะตััะฒะพะผ ะฝะฐ ะฒัะฑะพั!
ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ ัะพะปัะบะพ ะฟะพัะปะต ะฒัะตั
ะพััะฐะปัะฝัั
procedures ะฟะธั-ััะพะฟะฐ!
ืืขืืื, ืชืืืื ืืชืืืืง ืขืืื ืืื ืฉืฆืจืื! ืืื, ืฉืื ืืืจ ืื ืืื ืข ืืืืชื ื ืืืฉืชืืฉ ืืืกืืจืืืื ืืคืจืืืจ ืืงืื ืกืืจืืงืืืจ! ืืืืืื, ืื:
public class Auto {
private FillStrategy fillStrategy;
public Auto(FillStrategy fillStrategy) {
this.fillStrategy = fillStrategy;
}
public void fill() {
this.fillStrategy.fill();
}
public void gas() {
System.out.println("ะะดะตะผ ะฒะฟะตัะตะด");
}
public void stop() {
System.out.println("ะขะพัะผะพะทะธะผ!");
}
}
public class Sedan extends Auto {
public Sedan() {
super(new StandartFillStrategy());
}
}
public class HybridAuto extends Auto {
public HybridAuto() {
super(new HybridFillStrategy());
}
}
public class F1Car extends Auto {
public F1Car() {
super(new F1PitstopStrategy());
}
}
ืืืื ื ืจืืฅ ืืช ืืฉืืื ืฉืื ื main()
(ืืื ื ืฉืืจืช ืืื ืฉืื ืื) ืื ืงืื ืืช ืืืชื ืชืืฆืื! ืคืื ืืกืืฃ:
ะัะพััะพ ะทะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ!
ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝะพะผ or ัะปะตะบััะธัะตััะฒะพะผ ะฝะฐ ะฒัะฑะพั!
ะะฐะฟัะฐะฒะปัะตะผ ะฑะตะฝะทะธะฝ ัะพะปัะบะพ ะฟะพัะปะต ะฒัะตั
ะพััะฐะปัะฝัั
procedures ะฟะธั-ััะพะฟะฐ!
ืืคืืก ืืืกืืจืืืื ืืืืืจ ืืฉืคืื ืฉื ืืืืืจืืชืืื, ืืงืคื ืื ืืื ืืื ืืืืืื ืฉืื ื ืืชื ืื ืืืืืคื. ืืื ืืืคืฉืจืช ืืฉื ืืช ืืืืืจืืชืืื ืืื ืงืฉืจ ืืฉืืืืฉ ืืื ืืฆื ืืืงืื (ืืืืจื ืื ืืงืืื ืืืกืคืจ "ืืงืืจืช ืืคืืกื ืขืืฆืื" ืื ืจืืืช ืื ืืืฆืืืช ืืืืชืจ). ![ืืคืืก ืขืืฆืื "ืืกืืจืืืื" - 4](https://cdn.javarush.com/images/article/6d9ab390-1860-4470-ae46-384250d4d119/512.jpeg)
Auto
:
public class Auto {
FillStrategy fillStrategy;
public void fill() {
fillStrategy.fill();
}
public void gas() {
System.out.println("ะะดะตะผ ะฒะฟะตัะตะด");
}
public void stop() {
System.out.println("ะขะพัะผะพะทะธะผ!");
}
public void setFillStrategy(FillStrategy fillStrategy) {
this.fillStrategy = fillStrategy;
}
}
ืืขืช ืื ื ืืืืืื ืืฉื ืืช ืืกืืจืืืืืช ืชืื ืืื ืชื ืืขื:
public class Main {
public static void main(String[] args) {
ChildrenBuggies buggies = new ChildrenBuggies();
buggies.setFillStrategy(new StandartFillStrategy());
buggies.fill();
}
}
ืื ืคืชืืื ืืืื ืืืช ืืจืืจืืช ืืืืืื ืืชืืืื ืืืชืืื ืืื ืืื, ืืชืืื ืืช ืฉืื ื ืชืืื ืืืื ื ืืชืจืืืฉ ืืื :) ืื ืืื, ืืขืฆื! ืืืืช ืขืื ืืคืืก ืขืืฆืืื, ืฉืืื ืกืคืง ืชืฆืืจื ืืืขืืืจ ืื ืืืชืจ ืืคืขื ืืืช ืืขืืืื ืขื ืคืจืืืงืืื ืืืืชืืื :) ื ืชืจืื ืฉืื!
GO TO FULL VERSION