简单工厂模式

本文介绍了Java中的简单工厂模式,通过创建一个工厂类来决定实例化哪个具体类,如Student和Teacher。作者展示了如何从原始实现逐步改进,包括引入接口以实现多态,并最终将对象创建过程交给工厂类。虽然疑惑直接new对象为何需要工厂模式,但认识到随着实例对象增加,工厂模式有利于维护。文章鼓励读者探讨这种设计模式的优点。
摘要由CSDN通过智能技术生成

设计模式学习一之简单工厂模式

最近打算开始学习设计模式那就从最简单的工厂模式开始。
首先学习就必须了解其概念,网上看了许多概念说下自己的理解就是创建一个工厂类来决定你要创建什么实体类。来举个简单的栗子:你创建一个People的工厂类,通过这个工厂类中的方法你可以来创建出学生类和教师类。我们先写两个类,学生类和教师类。下面是对应的代码:

public class Student {

    public void getRole(){   
        System.out.println("我是一名学生");
    }
}

public class Teacher {
    
    public  void getRole(){
        System.out.println("我是一名教师");
    }
}

此时大家可以发现这两个类都有共同的方法。那么我们将其抽取出来编写一个接口,让这两个类都去实现它。

public interface People {
    void getRole();
}
public class Student implements People {
	
	@Override
    public void getRole(){   
        System.out.println("我是一名学生");
    }
}

public class Teacher {

    @Override
    public  void getRole(){
        System.out.println("我是一名教师");
    }
}

此时,编写一个测试类去测试。代码如下:

    public static void main(String[] args) {
        //使用到了java中的多态。
        People student=new Student();
        People teacher=new Teacher();

        student.getRole();
        teacher.getRole();
    }
}

这样效果就与我们第一次那样测试的效果是一样的,但是代码我们还是可以继续进行改进的。此时我们可以把这个对象的创建交给工厂去。然后根据一定的逻辑来决定你需要创建那个实体类。下面创建工厂类。并完成其中的相关代码:

public class PeopleFactory {

    public  static  Object createObject(String s) throws IllegalAccessException, InstantiationException {
        if(s.equalsIgnoreCase("student")){
            //如果传入字符串为student,忽略大小写。则创建Studnet对象
            return new Student();
            //也可以使用反射的方式来创建
//            return Student.class.newInstance();
        }else if(s.equalsIgnoreCase("teacher")){
            return new Teacher();
//            return Teacher.class.newInstance();
        }else{
            return "没有实例对象";
        }
    }
}

也可以一个一个类去创建不用我这样去创建对应的类。此时测试类就需要改变一下。

public class TestPeople  {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        People student=(Student) PeopleFactory.createObject("student");
        People teacher=(Teacher) PeopleFactory.createObject("teacher");
        student.getRole();
        teacher.getRole();
    }
}

这样整个简单工厂的基本实现就已经完成了。或许可能许多人也有跟我一样的疑问,直接new这个对象不就行了嘛?干嘛这么麻烦呢?其实我现在也没想清楚这样做的原因,哈哈。但是却发现其中的缺点:随着要创建的实例对象越多,那么就要去维护对应的工厂。
好了,这篇文章就这样了,大家也可以搜搜这样做的好处是什么?一起学习呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值