设计模式【一】工厂模式 & 单例模式 & 建造者模式

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 SingleTon instance;

    private SingleTon () {

    }

    public static 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;
    }

}

设计模式【二】代理模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值