工厂模式

public class DesignPattern {

    public static void main(String[] args) {

        //工厂设计模式便于用户使用,可以屏蔽底层实现细节,便于用于直接获得想要的东西,而且方便扩展
        //无需修改工厂代码,就可以扩展想要得到的东西,使用场景如下:
        //1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,
        //用户可以选择记录日志到什么地方。 
        //2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
        //3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",
        //可以把这三个作为产品类,共同实现一个接口。
        AnimalFactory factory = new AnimalFactory();
        Animal dog = factory.getAnimal("Dog");
        dog.eat();
        Animal cat = factory.getAnimal("Cat");
        cat.eat();

    }

}
interface Animal{
    //定义抽象方法,不同实例可以对其具有不同的实现
    void eat();
}
class Dog implements Animal{
    @Override
    public void eat() {
        System.out.println("狗要吃东西");
    }
}
class Cat implements Animal{
    @Override
    public void eat() {
        System.out.println("猫要吃东西");
    }
}

class AnimalFactory{

    public Animal getAnimal(String str){
        Animal animal = null;
        if(str == null){
            System.out.println("传入参数有误");
            return null;
        }else{
            try {
               //使用反射,无需进行if else判断,缺点是需要将所有类放入同一个包,但可以进行优化
               //即用户输入全类名 
                animal =  (Animal) Class.forName("com.zhouge.design.test." + str).newInstance();
            } catch (Exception e) {
                System.out.println("该动物不存在");
            }
        }
        return animal;
    }

}
大家一起快乐学Java 文章被收录于专栏

本人2021届应届本科生毕业于浙江海洋大学,校招拿到BAT等大厂offer,本专栏的目的是分享一些校招面试过程中的一些重要知识点,以及当前比较流行的技术底层原理和一些面试问的较多的知识点的剖析。后续也会分享一些在阿里工作过程中遇到的一些问题,把问题抽象出来给出我的思路,大家可以一起来思考,互相促进,互相学习。

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务