设计模式-工厂模式


前言

工厂模式的用处:灵活控制生产对象的过程。比如说我们想在生产对象的时候打印日志或者加上权限控制,那么工厂模式就是一种好的选择。
大体分为两种
1、工厂模式(主要处理多产品的作用),比如我们定位了交通工具下就有很多种产品,如飞机,汽车,火车等
2、抽象工厂模式(主要处理多产品族作用),产品族的概念,举个例子就像苹果公司有自己的产品一族,如苹果手机,苹果电脑等。而华为也有自己的产品一族,如华为手机,华为电脑等

一、工厂模式

1.1 类图如下

在这里插入图片描述

1.1 工厂

BaseFactory

public abstract class BaseFactory {

    abstract BaseVehicle create();

}

CarFactory

public class CarFactory extends BaseFactory {
    @Override
    BaseVehicle create() {
        //处理生产过程,如权限校验,或者日志记录等
        return new Car();
    }
}

TrainFactory

public class TrainFactory extends BaseFactory {

    @Override
    BaseVehicle create() {
        //处理生产过程,如权限校验,或者日志记录等
        return new Train();
    }
}

1.2 产品

BaseVehicle

public abstract class BaseVehicle {

    abstract void run();

}

Car

public class Car extends BaseVehicle {
    @Override
    void run() {
        System.out.println("汽车~~~");
    }
}

Train

public class Train extends BaseVehicle {

    @Override
    void run() {
        System.out.println("火车~~~");
    }
}

1.3 测试

public class Main {

  public static void main(String[] args) {
        //将来可以使用apollo等配置中心,在上面配置key=com.cch.factorymethod.TrainFactory
        //然后在下面的地方,利用反射 Class.forName() 产生对应对象
        BaseFactory factory = new TrainFactory();
        BaseVehicle vehicle = factory.create();
        vehicle.run();
    }

}

二、抽象工厂模式

2.1 类图如下

在这里插入图片描述

2.2 产品

BasePhone

public abstract class BasePhone {

    abstract void call();

}

ApplePhone

public class ApplePhone extends BasePhone {
    @Override
    void call() {
        System.out.println("苹果电话。。。");
    }
}

HuaweiPhone

public class HuaweiPhone extends BasePhone {
    @Override
    void call() {
        System.out.println("华为电话~~~");
    }
}

BaseComputer

public abstract class BaseComputer {
    abstract void compute();

}

AppleComputer

public class AppleComputer extends BaseComputer {
    @Override
    void compute() {
        System.out.println("苹果电脑~~~~");
    }
}

HuaweiComputer

public class HuaweiComputer extends BaseComputer {
    @Override
    void compute() {
        System.out.println("华为电脑!!!");
    }
}

2.3 工厂

BaseFactory

public abstract class BaseFactory {

    abstract BasePhone createPhone();

    abstract BaseComputer createComputer();
}

AppleFactory

public class AppleFactory extends BaseFactory {
    @Override
    BasePhone createPhone() {
        //权限或者日志记录
        return new ApplePhone();
    }

    @Override
    BaseComputer createComputer() {
        //权限或者日志记录
        return new AppleComputer();
    }
}

HuaweiFactory

public class HuaweiFactory extends BaseFactory {
    @Override
    BasePhone createPhone() {
        //权限或者日志记录
        return new HuaweiPhone();
    }

    @Override
    BaseComputer createComputer() {
        //权限或者日志记录
        return new HuaweiComputer();
    }
}

2.4 测试

public class Main {

    public static void main(String[] args) {
        //将来可以使用apollo等配置中心,在上面配置key=com.cch.abstractfactorymethod.AppleFactory
        //然后在下面的地方,利用反射 Class.forName() 产生对应对象
        BaseFactory factory = new AppleFactory();
        BasePhone phone = factory.createPhone();
        BaseComputer computer = factory.createComputer();
        phone.call();
        computer.compute();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值