āđ‚āļ„āđ‰āļ”āļĒāļīāļĄ/āļˆāļēāļ§āļēāļšāļĨāđ‡āļ­āļ/āļŠāļļāđˆāļĄ/āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđƒāļ™ Java [āļ•āļ­āļ™āļ—āļĩāđˆ 2]
John Squirrels
āļĢāļ°āļ”āļąāļš
San Francisco

āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđƒāļ™ Java [āļ•āļ­āļ™āļ—āļĩāđˆ 2]

āđ€āļœāļĒāđāļžāļĢāđˆāđƒāļ™āļāļĨāļļāđˆāļĄ
āļŠāļ§āļąāļŠāļ”āļĩāļ—āļļāļāļ„āļ™. āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđāļĨāđ‰āļ§āļ‰āļąāļ™āđ„āļ”āđ‰āļ­āļ˜āļīāļšāļēāļĒāđāļ•āđˆāļĨāļ°āļĢāļđāļ›āđāļšāļšāđ‚āļ”āļĒāļĒāđˆāļ­ āđƒāļ™āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļ‰āļąāļ™āļˆāļ°āļžāļĒāļēāļĒāļēāļĄāđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ§āļīāļ˜āļĩāđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļš
āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđƒāļ™ Java [āļ•āļ­āļ™āļ—āļĩāđˆ 2] - 1

āļŠāļĢāđ‰āļēāļ‡āļŠāļĢāļĢāļ„āđŒ

āļ‹āļīāļ‡āđ€āļāļīāļĨāļ•āļąāļ™

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļˆāļģāļāļąāļ”āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ„āļĨāļēāļŠāđ„āļ§āđ‰āļ—āļĩāđˆāļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāđ€āļ”āļĩāļĒāļ§ āđāļĨāļ°āđƒāļŦāđ‰āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāđ€āļ”āļĩāļĒāļ§āļ™āļąāđ‰āļ™ āļ•āļąāļ§āļŠāļĢāđ‰āļēāļ‡āļ„āļĨāļēāļŠāđ€āļ›āđ‡āļ™āđāļšāļšāļŠāđˆāļ§āļ™āļ•āļąāļ§ āļ§āļīāļ˜āļĩgetInstance()āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļžāļĩāļĒāļ‡āļŦāļ™āļķāđˆāļ‡āļ­āļīāļ™āļŠāđāļ•āļ™āļ‹āđŒāļ‚āļ­āļ‡āļ„āļĨāļēāļŠ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class Singleton {
    private static Singleton instance = null;
    private Singleton() {}
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
		}
        return instance;
    }
    public void setUp() {
        System.out.println("setUp");
    }
}

public class SingletonTest { // Test
    public static void main(String[] args){
        Singleton singelton = Singleton.getInstance();
        singelton.setUp();
    }
}

āđ‚āļĢāļ‡āļ‡āļēāļ™

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŠāđ‰āđ€āļĄāļ·āđˆāļ­āđ€āļĢāļēāļĄāļĩāļ‹āļđāđ€āļ›āļ­āļĢāđŒāļ„āļĨāļēāļŠāļ—āļĩāđˆāļĄāļĩāļ„āļĨāļēāļŠāļĒāđˆāļ­āļĒāļŦāļĨāļēāļĒāļĢāļēāļĒāļāļēāļĢ āđāļĨāļ°āđ€āļĢāļēāļ•āđ‰āļ­āļ‡āļāļēāļĢāļŠāđˆāļ‡āļ„āļ·āļ™āļ„āļĨāļēāļŠāļĒāđˆāļ­āļĒāļ•āļēāļĄāļ­āļīāļ™āļžāļļāļ• āļŠāļąāđ‰āļ™āđ€āļĢāļĩāļĒāļ™āđ„āļĄāđˆāļ—āļĢāļēāļšāļ§āđˆāļēāļ„āļ§āļĢāļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āđ€āļ āļ—āđƒāļ” āļ§āļąāļ•āļ–āļļāļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ‚āļķāđ‰āļ™āļ•āļēāļĄāļ­āļīāļ™āļžāļļāļ• āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class Factory {
    public OS getCurrentOS(String inputOS) {
        OS os = null;
        if (inputOS.equals("windows")) {
            os = new windowsOS();
        } else if (inputOS.equals("linux")) {
            os = new linuxOS();
        } else if (inputOS.equals("mac")) {
            os = new macOS();
        }
        return os;
    }
}
interface OS {
    void getOS();
}
class windowsOS implements OS {
    public void getOS () {
        System.out.println("uses Windows");
    }
}
class linuxOS implements OS {
    public void getOS () {
        System.out.println("uses Linux");
    }
}
class macOS implements OS {
    public void getOS () {
        System.out.println("uses macOS");
    }
}

public class FactoryTest { // Test
    public static void main(String[] args){
         String osName = "linux";
        Factory factory = new Factory();
        OS os = factory.getCurrentOS(osName);
        os.getOS();
    }
}

āđ‚āļĢāļ‡āļ‡āļēāļ™āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ™āļēāļĄāļ˜āļĢāļĢāļĄ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŦāđ‰āļ„āļļāļ“āđ€āļĨāļ·āļ­āļāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āđ‚āļĢāļ‡āļ‡āļēāļ™āđ€āļ‰āļžāļēāļ°āļˆāļēāļāļāļĨāļļāđˆāļĄāđ‚āļĢāļ‡āļ‡āļēāļ™āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āđ„āļ”āđ‰ āļŠāļĢāđ‰āļēāļ‡āļ•āļĢāļ°āļāļđāļĨāļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļ™ āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļ‚āļĒāļēāļĒ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Lada {
    long getLadaPrice();
}
interface Ferrari {
    long getFerrariPrice();
}
interface Porshe {
    long getPorshePrice();
}
interface InteAbsFactory {
    Lada getLada();
    Ferrari getFerrari();
    Porshe getPorshe();
}
class UaLadaImpl implements Lada { // First
    public long getLadaPrice() {
        return 1000;
    }
}
class UaFerrariImpl implements Ferrari {
    public long getFerrariPrice() {
        return 3000;
    }
}
class UaPorsheImpl implements Porshe {
    public long getPorshePrice() {
        return 2000;
    }
}
class UaCarPriceAbsFactory implements InteAbsFactory {
    public Lada getLada() {
        return new UaLadaImpl();
    }
    public Ferrari getFerrari() {
        return new UaFerrariImpl();
    }
    public Porshe getPorshe() {
        return new UaPorsheImpl();
    }
} // First
class RuLadaImpl implements Lada { // Second
    public long getLadaPrice() {
        return 10000;
    }
}
class RuFerrariImpl implements Ferrari {
    public long getFerrariPrice() {
        return 30000;
    }
}
class RuPorsheImpl implements Porshe {
    public long getPorshePrice() {
        return 20000;
    }
}
class RuCarPriceAbsFactory implements InteAbsFactory {
    public Lada getLada() {
        return new RuLadaImpl();
    }
    public Ferrari getFerrari() {
        return new RuFerrariImpl();
    }
    public Porshe getPorshe() {
        return new RuPorsheImpl();
    }
} // Second

public class AbstractFactoryTest { // Test
    public static void main(String[] args) {
        String country = "UA";
        InteAbsFactory ifactory = null;
        if(country.equals("UA")) {
            ifactory = new UaCarPriceAbsFactory();
        } else if(country.equals("RU")) {
            ifactory = new RuCarPriceAbsFactory();
        }

        Lada lada = ifactory.getLada();
        System.out.println(lada.getLadaPrice());
    }
}

āļœāļđāđ‰āļŠāļĢāđ‰āļēāļ‡

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđ‚āļ”āļĒāđƒāļŠāđ‰āļ§āļąāļ•āļ–āļļāļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒ āļĄāļąāļ™āļ„āđˆāļ­āļĒāđ†āļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāļˆāļēāļāļ§āļąāļ•āļ–āļļāļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāļ—āļĩāđˆāđ€āļĢāļĩāļĒāļšāļ‡āđˆāļēāļĒ āđƒāļŦāđ‰āļ„āļļāļ“āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļĒāđƒāļ™āļ‚āļ­āļ‡āļœāļĨāļīāļ•āļ āļąāļ“āļ‘āđŒāļ‚āļąāđ‰āļ™āļŠāļļāļ”āļ—āđ‰āļēāļĒ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class Car {
    public void buildBase() {
        print("Building the base");
    }
    public void buildWheels() {
        print("Installing wheels");
    }
    public void buildEngine(Engine engine) {
        print("Installing engine: " + engine.getEngineType());
    }
    private void print(String msg){
        System.out.println(msg);
    }
}
interface Engine {
    String getEngineType();
}
class EngineOne implements Engine {
    public String getEngineType() {
        return "First engine";
    }
}
class EngineTwo implements Engine {
    public String getEngineType() {
        return "Second engine";
    }
}
abstract class Builder {
    protected Car car;
    public abstract Car buildCar();
}
class OneBuilderImpl extends Builder {
    public OneBuilderImpl(){
        car = new Car();
    }
    public Car buildCar() {
        car.buildBase();
        car.buildWheels();
        Engine engine = new EngineOne();
        car.buildEngine(engine);
        return car;
    }
}
class TwoBuilderImpl extends Builder {
    public TwoBuilderImpl(){
        car = new Car();
    }
    public Car buildCar() {
        car.buildBase();
        car.buildWheels();
        Engine engine = new EngineOne();
        car.buildEngine(engine);
        car.buildWheels();
        engine = new EngineTwo();
        car.buildEngine(engine);
        return car;
    }
}
class Build {
    private Builder builder;
    public Build(int i){
        if(i == 1) {
            builder = new OneBuilderImpl();
        } else if(i == 2) {
            builder = new TwoBuilderImpl();
        }
    }
    public Car buildCar(){
        return builder.buildCar();
    }
}

public class BuilderTest { // Test
    public static void main(String[] args) {
        Build build = new Build(1);
        build.buildCar();
    }
}

āļ•āđ‰āļ™āđāļšāļš

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļŠāđˆāļ§āļĒāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđ€āļĄāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļ‹āđ‰āļģāļāļąāļ™ āđāļ—āļ™āļ—āļĩāđˆāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāđƒāļŦāļĄāđˆāļˆāļ°āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āļŠāđˆāļ‡āļāļĨāļąāļšāđ‚āļ„āļĨāļ™āļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ āđ‚āļ„āļĨāļ™āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Copyable {
    Copyable copy();
}
class ComplicatedObject implements Copyable {
    private Type type;
    public enum Type {
        ONE, TWO
    }
    public ComplicatedObject copy() {
        ComplicatedObject complicatedObject = new ComplicatedObject();
        return complicatedObject;
    }
    public void setType(Type type) {
        this.type = type;
    }
}

public class PrototypeTest { // Test
    public static void main(String[] args) {
        ComplicatedObject prototype = new ComplicatedObject();
        ComplicatedObject clone = prototype.copy();
        clone.setType(ComplicatedObject.Type.ONE);
    }
}

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡

āļ­āđāļ”āļ›āđ€āļ•āļ­āļĢāđŒ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļšāļ­āļ°āđāļ”āļ›āđ€āļ•āļ­āļĢāđŒāđ€āļžāļ·āđˆāļ­āļĢāļ§āļĄāļŠāļ­āļ‡āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹āļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļāļąāļ™āđ„āļĄāđˆāđ„āļ”āđ‰ āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ•āļąāļ§āđāļ›āļĨāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļŠāļ­āļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāđ€āļ‚āđ‰āļēāļāļąāļ™āđ„āļĄāđˆāđ„āļ”āđ‰ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class PBank {
	private int balance;
	public PBank() { balance = 100; }
	public void getBalance() {
		System.out.println("PBank balance = " + balance);
	}
}
class ABank {
	private int balance;
	public ABank() { balance = 200; }
	public void getBalance() {
		System.out.println("ABank balance = " + balance);
	}
}
class PBankAdapter extends PBank {
	private ABank abank;
	public PBankAdapter(ABank abank) {
		this.abank = abank;
	}
	public void getBalance() {
		abank.getBalance();
	}
}

public class AdapterTest { // Test
	public static void main(String[] args) {
		PBank pbank = new PBank();
		pbank.getBalance();
		PBankAdapter abank = new PBankAdapter(new ABank());
		abank.getBalance();
	}
}

āļ„āļ­āļĄāđ‚āļžāļŠāļīāļ•

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļˆāļąāļ”āļāļĨāļļāđˆāļĄāļ§āļąāļ•āļ–āļļāļ•āđˆāļēāļ‡āđ† āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđāļšāļšāļ•āđ‰āļ™āđ„āļĄāđ‰āđ‚āļ”āļĒāđƒāļŠāđ‰āļ„āļĨāļēāļŠāđ€āļ”āļĩāļĒāļ§ āđƒāļŦāđ‰āļ„āļļāļ“āļ—āļģāļ‡āļēāļ™āļāļąāļšāļŦāļĨāļēāļĒāļ„āļĨāļēāļŠāļœāđˆāļēāļ™āļ­āļ­āļšāđ€āļˆāļāļ•āđŒāđ€āļ”āļĩāļĒāļ§ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
import java.util.ArrayList;
import java.util.List;
interface Car {
    void draw(String color);
}
class SportsCar implements Car {
    public void draw(String color) {
        System.out.println("SportsCar color: " + color);
    }
}
class UnknownCar implements Car {
    public void draw(String color) {
        System.out.println("UnknownCar color: " + color);
    }
}
class Drawing implements Car {
    private List<Car> cars = new ArrayList<Car>();
    public void draw(String color) {
        for(Car car : cars) {
            car.draw(color);
        }
    }
    public void add(Car s){
        this.cars.add(s);
    }
    public void clear(){
		System.out.println();
        this.cars.clear();
    }
}

public class CompositeTest { // Test
    public static void main(String[] args) {
        Car sportsCar = new SportsCar();
        Car unknownCar = new UnknownCar();
        Drawing drawing = new Drawing();
        drawing.add(sportsCar);
        drawing.add(unknownCar);
        drawing.draw("green");
        drawing.clear();
        drawing.add(sportsCar);
        drawing.add(unknownCar);
        drawing.draw("white");
    }
}

āļŦāļ™āļąāļ‡āļŠāļ·āļ­āļĄāļ­āļšāļ‰āļąāļ™āļ—āļ°

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđāļŠāļ”āļ‡āļ–āļķāļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ„āļ§āļšāļ„āļļāļĄāļ§āļąāļ•āļ–āļļāļ­āļ·āđˆāļ™āđ‚āļ”āļĒāļāļēāļĢāļŠāļāļąāļ”āļāļąāđ‰āļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ” āļ„āļļāļ“āļŠāļēāļĄāļēāļĢāļ–āļŠāļāļąāļ”āļāļąāđ‰āļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļāđ€āļĄāļ˜āļ­āļ”āļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļāļ”āļąāđ‰āļ‡āđ€āļ”āļīāļĄāđ„āļ”āđ‰ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Image {
    void display();
}
class RealImage implements Image {
    private String file;
    public RealImage(String file){
        this.file = file;
        load(file);
    }
    private void load(String file){
        System.out.println("Loading " + file);
    }
    public void display() {
        System.out.println("Displaying " + file);
    }
}
class ProxyImage implements Image {
    private String file;
    private RealImage image;
    public ProxyImage(String file){
        this.file = file;
    }
    public void display() {
        if(image == null){
            image = new RealImage(file);
        }
        image.display();
    }
}

public class ProxyTest { // Test
    public static void main(String[] args) {
        Image image = new ProxyImage("test.jpg");
        image.display();
        image.display();
    }
}

āļŸāļĨāļēāļĒāđ€āļ§āļ—

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ™āļģāļ§āļąāļ•āļ–āļļāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āđƒāļŦāļĄāđˆāđāļ—āļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļ„āļĨāđ‰āļēāļĒāļāļąāļ™āļˆāļģāļ™āļ§āļ™āļĄāļēāļ āļšāļąāļ™āļ—āļķāļāļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class Flyweight {
    private int row;
    public Flyweight(int row) {
        this.row = row;
        System.out.println("ctor: " + this.row);
    }
    void report(int col) {
        System.out.print(" " + row + col);
    }
}

class Factory {
    private Flyweight[] pool;
    public Factory(int maxRows) {
        pool = new Flyweight[maxRows];
    }
    public Flyweight getFlyweight(int row) {
        if (pool[row] == null) {
            pool[row] = new Flyweight(row);
        }
        return pool[row];
    }
}

public class FlyweightTest { // Test
    public static void main(String[] args) {
        int rows = 5;
        Factory theFactory = new Factory(rows);
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < rows; j++) {
                theFactory.getFlyweight(i).report(j);
            }
            System.out.println();
        }
    }
}

āļ‹āļļāđ‰āļĄ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ‹āđˆāļ­āļ™āļĢāļ°āļšāļšāļ„āļĨāļēāļŠāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđ‚āļ”āļĒāđ€āļžāļīāđˆāļĄāļāļēāļĢāđ€āļĢāļĩāļĒāļāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ›āļĒāļąāļ‡āļ­āļ­āļšāđ€āļˆāļāļ•āđŒāđ€āļ”āļĩāļĒāļ§ āļ§āļēāļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āđ€āļĄāļ˜āļ­āļ”āļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļŦāļĨāļēāļĒ āđ† āļ­āļąāļ™āđ„āļ§āđ‰āđƒāļ™āļ§āļąāļ•āļ–āļļāđ€āļ”āļĩāļĒāļ§ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Car {
    void start();
    void stop();
}
class Key implements Car {
    public void start() {
        System.out.println("Insert keys");
    }
    public void stop() {
        System.out.println("Remove keys");
    }
}
class Engine implements Car {
    public void start() {
        System.out.println("Start engine");
    }
    public void stop() {
        System.out.println ("Stop engine");
    }
}
class Facade {
    private Key key;
    private Engine engine;
    public Facade() {
        key = new Key();
        engine = new Engine();
    }
    public void startCar() {
        key.start();
        engine.start();
    }
    public void stoptCar() {
        key.stop();
        engine.stop();
    }
}

public class FacadeTest { // Test
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.startCar();
        System.out.println();
        facade.stoptCar();
    }
}

āļŠāļ°āļžāļēāļ™

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđāļĒāļāļāļēāļĢāļ™āļģāđ„āļ›āļ›āļāļīāļšāļąāļ•āļīāļ­āļ­āļāļˆāļēāļāļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ™āļēāļĄāļ˜āļĢāļĢāļĄ āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ•āđˆāļĨāļ°āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ­āļīāļŠāļĢāļ°āļˆāļēāļāļāļąāļ™ āļ—āļģāđƒāļŦāđ‰āļ„āļĨāļēāļŠāđ€āļ‰āļžāļēāļ°āđ€āļ›āđ‡āļ™āļ­āļīāļŠāļĢāļ°āļˆāļēāļāļ„āļĨāļēāļŠāļ—āļĩāđˆāđƒāļŠāđ‰āļ­āļīāļ™āđ€āļ—āļ­āļĢāđŒāđ€āļŸāļ‹ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Engine {
    void setEngine();
}
abstract class Car {
    protected Engine engine;
    public Car(Engine engine){
        this.engine = engine;
    }
    abstract public void setEngine();
}
class SportsCar extends Car {
    public SportsCar(Engine engine) {
        super(engine);
    }
    public void setEngine() {
        System.out.print("SportsCar engine: ");
        engine.setEngine();
    }
}
class UnknownCar extends Car {
    public UnknownCar(Engine engine) {
        super(engine);
    }
    public void setEngine() {
        System.out.print("UnknownCar engine: ");
        engine.setEngine();
    }
}
class PerformanceEngine implements Engine {
    public void setEngine(){
        System.out.println("sport");
    }
}
class UnknownEngine implements Engine {
    public void setEngine(){
        System.out.println("unknown");
    }
}
public class BridgeTest { // Test
    public static void main(String[] args) {
        Car sportsCar = new SportsCar(new PerformanceEngine());
        sportsCar.setEngine();
        System.out.println();
        Car unknownCar = new UnknownCar(new UnknownEngine());
        unknownCar.setEngine();
    }
}

āļĄāļąāļ“āļ‘āļ™āļēāļāļĢ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđ€āļžāļīāđˆāļĄāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđƒāļŦāļĄāđˆāđƒāļŦāđ‰āļāļąāļšāļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļœāļđāļāđ€āļ‚āđ‰āļēāļāļąāļšāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Car {
    void draw();
}
class SportsCar implements Car {
    public void draw() {
        System.out.println("SportsCar");
    }
}
class UnknownCar implements Car {
    public void draw() {
        System.out.println("UnknownCar");
    }
}
abstract class CarDecorator implements Car {
    protected Car decorated;
    public CarDecorator(Car decorated){
        this.decorated = decorated;
    }
    public void draw(){
        decorated.draw();
    }
}
class BlueCarDecorator extends CarDecorator {
    public BlueCarDecorator(Car decorated) {
        super(decorated);
    }
    public void draw() {
        decorated.draw();
        setColor();
    }
    private void setColor(){
        System.out.println("Color: red");
    }
}

public class DecoratorTest { // Test
    public static void main(String[] args) {
        Car sportsCar = new SportsCar();
        Car blueUnknownCar = new BlueCarDecorator(new UnknownCar());
        sportsCar.draw();
        System.out.println();
        blueUnknownCar.draw();
    }
}

āļžāļĪāļ•āļīāļāļĢāļĢāļĄ

āļ§āļīāļ˜āļĩāđāļĄāđˆāđāļšāļš

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŦāđ‰āļ„āļļāļ“āļāļģāļŦāļ™āļ”āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāļžāļ·āđ‰āļ™āļāļēāļ™āđāļĨāļ°āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āļĨāļđāļāļŦāļĨāļēāļ™āđāļ—āļ™āļ—āļĩāđˆāļšāļēāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ”āļĒāļĢāļ§āļĄ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
abstract class Car {
    abstract void startEngine();
    abstract void stopEngine();

    public final void start(){
        startEngine();
        stopEngine();
    }
}
class CarOne extends Car {
    public void startEngine() {
        System.out.println("Start engine.");
    }
    public void stopEngine() {
        System.out.println("Stop engine.");
    }
}
class CarTwo extends Car {
    public void startEngine() {
        System.out.println("Start engine.");
    }
    public void stopEngine() {
        System.out.println("Stop engine.");
    }
}

public class TemplateTest { // Test
    public static void main(String[] args) {
        Car car1 = new CarOne();
        car1.start();
        System.out.println();
        Car car2 = new CarTwo();
        car2.start();
    }
}

āļ„āļ™āļāļĨāļēāļ‡

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļˆāļąāļ”āđ€āļ•āļĢāļĩāļĒāļĄāļ„āļĨāļēāļŠāļ•āļąāļ§āļāļĨāļēāļ‡āļ—āļĩāđˆāļˆāļąāļ”āļāļēāļĢāļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ„āļĨāļēāļŠāļ•āđˆāļēāļ‡āđ† āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
class Mediator {
    public static void sendMessage(User user, String msg){
        System.out.println(user.getName() + ": " + msg);
    }
}
class User {
    private String name;
    public User(String name){
        this.name  = name;
    }
    public String getName() {
        return name;
    }
    public void sendMessage(String msg){
        Mediator.sendMessage(this, msg);
    }
}

public class MediatorTest { // Test
    public static void main(String[] args) {
        User user1 = new User("user1");
        User user2 = new User("user2");
        user1.sendMessage("message1");
        user2.sendMessage("message2");
    }
}

āļŦāđˆāļ§āļ‡āđ‚āļ‹āđˆāļ„āļ§āļēāļĄāļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāļžāļķāđˆāļ‡āļžāļēāļ­āļĒāđˆāļēāļ‡āđ€āļ‚āđ‰āļĄāļ‡āļ§āļ”āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļœāļđāđ‰āļŠāđˆāļ‡āđāļĨāļ°āļœāļđāđ‰āļĢāļąāļšāļ„āļģāļ‚āļ­ āļĒāļīāđˆāļ‡āļāļ§āđˆāļēāļ™āļąāđ‰āļ™ āļ„āļģāļ‚āļ­āļŠāļēāļĄāļēāļĢāļ–āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ­āļ­āļšāđ€āļˆāļāļ•āđŒ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Payment {
    void setNext(Payment payment);
    void pay();
}
class VisaPayment implements Payment {
    private Payment payment;
    public void setNext(Payment payment) {
        this.payment = payment;
    }
    public void pay() {
        System.out.println("Visa Payment");
    }
}
class PayPalPayment implements Payment {
    private Payment payment;
    public void setNext(Payment payment) {
        this.payment = payment;
    }
    public void pay() {
        System.out.println("PayPal Payment");
    }
}

public class ChainofResponsibilityTest { // Test
    public static void main(String[] args) {
        Payment visaPayment = new VisaPayment();
        Payment payPalPayment = new PayPalPayment();
        visaPayment.setNext(payPalPayment);
        visaPayment.pay();
    }
}

āļœāļđāđ‰āļŠāļąāļ‡āđ€āļāļ•āļāļēāļĢāļ“āđŒ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āļ§āļąāļ•āļ–āļļāļŦāļ™āļķāđˆāļ‡āļŠāļąāļ‡āđ€āļāļ•āļŠāļīāđˆāļ‡āļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđƒāļ™āļ§āļąāļ•āļ–āļļāļ­āļ·āđˆāļ™ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
import java.util.ArrayList;
import java.util.List;
interface Observer {
    void event(List<String> strings);
}
class University {
    private List<Observer> observers = new ArrayList<Observer>();
    private List<String> students = new ArrayList<String>();
    public void addStudent(String name) {
        students.add(name);
        notifyObservers();
    }
    public void removeStudent(String name) {
        students.remove(name);
        notifyObservers();
    }
    public void addObserver(Observer observer){
        observers.add(observer);
    }
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }
    public void notifyObservers(){
        for (Observer observer : observers) {
            observer.event(students);
        }
    }
}
class Director implements Observer {
    public void event(List<String> strings) {
        System.out.println("The list of students has changed: " + strings);
    }
}

public class ObserverTest { // Test
    public static void main(String[] args) {
        University university = new University();
        Director director = new Director();
        university.addStudent("Oscar");
        university.addObserver(director);
        university.addStudent("Anna");
        university.removeStudent("Oscar");
    }
}

āļāļĨāļĒāļļāļ—āļ˜āđŒ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļāļģāļŦāļ™āļ”āļŠāļļāļ”āļ‚āļ­āļ‡āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄāđāļĨāļ°āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āđ‚āļ•āđ‰āļ•āļ­āļšāđ„āļ”āđ‰ āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļāļĨāļĒāļļāļ—āļ˜āđŒ (āļ­āļąāļĨāļāļ­āļĢāļīāļ—āļķāļĄ) āđ„āļ”āđ‰āđƒāļ™āļ‚āļ“āļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Strategy {
    void download(String file);
}
class WindowsDownloadStrategy implements Strategy {
    public void download(String file) {
        System.out.println("windows download: " + file);
    }
}
class LinuxDownloadStrategy implements Strategy {
    public void download(String file) {
        System.out.println("linux download: " + file);
    }
}
class Context {
    private Strategy strategy;
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    public void download(String file){
        strategy.download(file);
    }
}

public class StrategyTest { // Test
    public static void main(String[] args) {
        Context context = new Context(new WindowsDownloadStrategy());
        context.download("file.txt");
        context = new Context(new LinuxDownloadStrategy());
        context.download("file.txt");
    }
}

āļŠāļąāđˆāļ‡āļāļēāļĢ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŦāđ‰āļ„āļļāļ“āļŠāļĢāļļāļ›āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ•āđˆāļēāļ‡āđ† āđƒāļ™āđāļ•āđˆāļĨāļ°āļ­āļ­āļšāđ€āļˆāļāļ•āđŒ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Command {
    void execute();
}
class Car {
    public void startEngine() {
        System.out.println("Start engine");
    }
    public void stopEngine() {
        System.out.println ("Stop engine");
    }
}
class StartCar implements Command {
    Car car;
    public StartCar(Car car) {
        this.car = car;
    }
    public void execute() {
        car.startEngine();
    }
}
class StopCar implements Command {
    Car car;
    public StopCar(Car car) {
        this.car = car;
    }
    public void execute() {
        car.stopEngine();
    }
}
class CarInvoker {
    public Command command;
    public CarInvoker(Command command){
        this.command = command;
    }
    public void execute(){
        this.command.execute();
    }
}

public class CommandTest { // Test
    public static void main(String[] args) {
        Car car = new Car();
        StartCar startCar = new StartCar(car);
        StopCar stopCar = new StopCar(car);
        CarInvoker carInvoker = new CarInvoker(startCar);
        carInvoker.execute();
    }
}

āļŠāļ–āļēāļ™āļ°

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āļ§āļąāļ•āļ–āļļāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĨāļąāļāļĐāļ“āļ°āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļķāđ‰āļ™āļ­āļĒāļđāđˆāļāļąāļšāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āļĄāļąāļ™ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface State {
    void doAction();
}
class StartPlay implements State {
    public void doAction() {
        System.out.println("start play");
    }
}
class StopPlay implements State {
    public void doAction() {
        System.out.println("stop play");
    }
}
class PlayContext implements State {
    private State state;
    public void setState(State state){
        this.state = state;
    }
    public void doAction() {
        this.state.doAction();
    }
}

public class StateTest { // Test
    public static void main(String[] args) {
        PlayContext playContext = new PlayContext();
        State startPlay = new StartPlay();
        State stopPlay = new StopPlay();
        playContext.setState(startPlay);
        playContext.doAction();
        playContext.setState(stopPlay);
        playContext.doAction();
    }
}

āļœāļđāđ‰āđ€āļĒāļĩāđˆāļĒāļĄāļŠāļĄ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļāļąāļšāļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļ™ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Visitor {
    void visit(SportsCar sportsCar);
    void visit(Engine engine);
    void visit(Wheel wheel);
}
interface Car {
    void accept(Visitor visitor);
}
class Engine implements Car {
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}
class Wheel implements Car {
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}
class SportsCar implements Car {
    Car[] cars;
    public SportsCar(){
        cars = new Car[]{new Engine(), new Wheel()};
    }
    public void accept(Visitor visitor) {
        for (int i = 0; i < cars.length; i++) {
            cars[i].accept(visitor);
        }
        visitor.visit(this);
    }
}
class CarVisitor implements Visitor {
    public void visit(SportsCar computer) {
        print("car");
    }
    public void visit(Engine engine) {
        print("engine");
    }
    public void visit(Wheel wheel) {
        print("wheel");
    }
    private void print(String string) {
        System.out.println(string);
    }
}

public class VisitorTest { // Test
    public static void main(String[] args) {
        Car computer = new SportsCar();
        computer.accept(new CarVisitor());
    }
}

āļĨāđˆāļēāļĄ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŦāđ‰āļ„āļļāļ“āļāļģāļŦāļ™āļ”āđ„āļ§āļĒāļēāļāļĢāļ“āđŒāļ‚āļ­āļ‡āļ āļēāļĐāļēāļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒāđƒāļ™āđ‚āļ”āđ€āļĄāļ™āļ›āļąāļāļŦāļē āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Expression {
    String interpret(Context context);
}
class Context {
     public String getLowerCase(String s){
        return s.toLowerCase();
    }
    public String getUpperCase(String s){
        return s.toUpperCase();
    }
}
 class LowerExpression implements Expression {
    private String s;
     public LowerExpression(String s) {
        this.s = s;
    }
    public String interpret(Context context) {
        return context.getLowerCase(s);
    }
}
class UpperExpression implements Expression {
    private String s;
    public UpperExpression(String s) {
        this.s = s;
    }
    public String interpret(Context context) {
        return context.getUpperCase(s);
    }
}

public class InterpreterTest { // Test
    public static void main(String[] args) {
        String str = "TesT";
        Context context = new Context();
         Expression lowerExpression = new LowerExpression(str);
         str = lowerExpression.interpret(context);
        System.out.println(str);
        Expression upperExpression = new UpperExpression(str);
        str = upperExpression.interpret(context);
        System.out.println(str);
    }
}

āļ•āļąāļ§āļ—āļģāļ‹āđ‰āļģ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āļ•āļąāļ§āļ§āļ™āļ‹āđ‰āļģāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļ‚āļ­āļ‡āļ„āļ­āļĨāđ€āļĨāļāļŠāļąāļ™āļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ‚āļ”āļĒāđ„āļĄāđˆāļ—āļĢāļēāļšāļĢāļđāļ›āđāļšāļšāļžāļ·āđ‰āļ™āļāļēāļ™ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
interface Iterator {
    boolean hasNext();
    Object next();
}
class Numbers {
    public int num[] = {1 , 2, 3};
    public Iterator getIterator() {
        return new NumbersIterator();
    }
    private class NumbersIterator implements Iterator {
        int ind;
        public boolean hasNext() {
            if(ind < num.length) return true;
            return false;
        }
        public Object next() {
            if(this.hasNext()) return num[ind++];
            return null;
        }
    }
}

public class IteratorTest { // Test
    public static void main(String[] args) {
        Numbers numbers = new Numbers();
        Iterator iterator = numbers.getIterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

āļ‚āļ­āļ‡āļ—āļĩāđˆāļĢāļ°āļĨāļķāļ

āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ:āđƒāļŦāđ‰āļ„āļļāļ“āļšāļąāļ™āļ—āļķāļāļŠāļ–āļēāļ™āļ°āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļ‚āļ­āļ‡āļ§āļąāļ•āļ–āļļ āļŠāļ–āļēāļ™āļ°āļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āļāļđāđ‰āļ„āļ·āļ™āđ„āļ”āđ‰āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡ āđ„āļĄāđˆāļĨāļ°āđ€āļĄāļīāļ”āļāļēāļĢāļŦāđˆāļ­āļŦāļļāđ‰āļĄ āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ:
import java.util.ArrayList;
import java.util.List;
class Memento {
    private String name;
    private int age;
    public Memento(String name, int age){
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
}
class User {
    private String name;
    private int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println(String.format("create: name = %s, age = %s", name, age));
    }
    public Memento save(){
        System.out.println(String.format("save: name = %s, age = %s", name, age));
        return new Memento(name, age);
    }
    public void restore(Memento memento){
        name = memento.getName();
        age = memento.getAge();
        System.out.println(String.format("restore: name = %s, age = %s", name, age));
    }
}
class SaveUser {
    private List<Memento> list = new ArrayList<Memento>();
    public void add(Memento memento){
        list.add(memento);
    }
    public Memento get(int ind){
        return list.get(ind);
    }
}

public class MementoTest { // Test
    public static void main(String[] args) {
        SaveUser saveUser = new SaveUser();
        User user1 = new User("Peter", 17);
        User user2 = new User("Ian", 19);
        saveUser.add(user1.save());
        user1.restore(saveUser.get(0));
    }
}
āļ‚āļ­āđƒāļŦāđ‰āđ‚āļŠāļ„āļ”āļĩāđƒāļ™āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ!
āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
  • āđ€āļ›āđ‡āļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄ
  • āđƒāļŦāļĄāđˆ
  • āđ€āļāđˆāļē
āļ„āļļāļ“āļ•āđ‰āļ­āļ‡āļĨāļ‡āļŠāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™
āļŦāļ™āđ‰āļēāļ™āļĩāđ‰āļĒāļąāļ‡āđ„āļĄāđˆāļĄāļĩāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđƒāļ” āđ†