設計模式【一】工廠、單例、建造者

1. 抽象工廠模式

public class AbstractFactory {
    interface Car {
        void driver();
    }

    class Benz implements Car {

        @Override
        public void driver() {
            System.out.println("Benz driving");
        }
    }

    class BMW implements Car {

        @Override
        public void driver() {
            System.out.println("Benz driving");
        }
    }

    interface CarFactory {
        Car create();
    }

    class BenzFactory implements CarFactory {

        @Override
        public Car create() {
            return new Benz();
        }
    }


    class BMWFactory implements CarFactory {

        @Override
        public Car create() {
            return new BMW();
        }
    }
}

2. 單例模式(常見的實現方式有 1. 餓漢式 2. 雙檢查+volatile 3. Holder輔助類,參看下方代碼 4. enum類實現)

/**
 * @authod: pp_lan on 2020/3/19.
 * 常見的爲double-check + volatile 實現
 * 此處使用 靜態類Holder 實現
 */
public class SingleTon {
    private static SingleTon instance;

    private SingleTon () {

    }

    public SingleTon getInstance() {
        return Holder.instance;
    }

    static class Holder {
        private static SingleTon instance = new SingleTon();
    }
}
/**
 * @authod: pp_lan on 2020/3/19.
 * 使用enum輔助實現
 */
public class SingleTon2 {

    private SingleTon2() {
    }

    public static SingleTon2 getInstance() {
        return EnumHolder.INSTANCE.singleTon;
    }

    private enum EnumHolder {
        INSTANCE;

        private SingleTon2 singleTon;

        EnumHolder() {
            this.singleTon = new SingleTon2();
        }
    }
}

3. 建造者

public class ConcreateBuilder extends Builder {
    @Override
    public void buildPartA() {
        this.product.setPartA("建造A部分");
        System.out.println();
    }

    @Override
    public void buildPartB() {
        this.product.setPartB("建造B部分");
    }

    @Override
    public void buildPartC() {
        this.product.setPartC("建造C部分");
    }

    @Override
    public Product getResult() {
        buildPartA();
        buildPartB();
        buildPartC();
        return super.getResult();
    }
}

public abstract class Builder {

    protected Product product = new Product();

    public abstract void buildPartA();

    public abstract void buildPartB();

    public abstract void buildPartC();

    public Product getResult () {
        return this.product;
    }

}

public class Product {

    String partA;

    String partB;

    String partC;

    public String getPartA() {
        return partA;
    }

    public void setPartA(String partA) {
        this.partA = partA;
    }

    public String getPartB() {
        return partB;
    }

    public void setPartB(String partB) {
        this.partB = partB;
    }

    public String getPartC() {
        return partC;
    }

    public void setPartC(String partC) {
        this.partC = partC;
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章