CodeGym /جاوا بلاگ /Random-SD /جاوا ۾ ڊيزائن جا نمونا [حصو 2]
John Squirrels
سطح
San Francisco

جاوا ۾ ڊيزائن جا نمونا [حصو 2]

گروپ ۾ شايع ٿيل
سڀني کي سلام. منهنجي پوئين مضمون ۾ ، مون مختصر طور تي هر نموني بيان ڪيو. هن مقالي ۾، مان ڏيکارڻ جي ڪوشش ڪندس، تفصيل سان، نمونن کي ڪيئن استعمال ڪجي.
جاوا ۾ ڊيزائن جا نمونا [حصو 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