「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。
Hello大家晚上好,我是阿Q,好久不见,甚为想念(窃喜)。最近一段时间一直在参与安卓项目的开发(已忙成狗),也没能抽出时间来继续为大家总结设计模式的知识,在这里Say sorry了。由于好久没有写安卓方面的东西了,所以最近一段时间写起代码来事倍功半,踩了N多坑,被虐成Dog了。
我最近有一个想法,就是想将之前学过的安卓知识再拾起来,以后在讲解java知识的同时也穿插着总结一下安卓的知识,也不知道大家感不感兴趣。如果大家想学习安卓或者有什么技术交流的可以在后台给阿Q留言,阿Q视情况不定期更新安卓。好了,今晚回来的比较早,就抽时间讲一下工厂模式与抽象工厂设计模式吧。
简单工厂模式
首先呢,我们先来了解一下简单工厂模式。其实简单工厂模式并不是一个真正的设计模式,而是一种编程习惯。既然是一种习惯,就说明它有可取之处。所谓简单工厂模式,就是定义一个工厂类,将实例化对象的操作放在该工厂中去执行,当客户端调用的时候只需要将参数传入工厂就可得到该实体类。
接下来阿Q就用一个小Demo来给大家做更详细的讲解。
一、定义一个抽象的接口
//定义课程接口
public interface Course {
void desc();
}
二、声明实体类来实现该接口
//语文课类
public class Chinese implements Course{
@Override
public void desc() {
System.out.println("这是语文课");
}
}
//数学课类
public class Math implements Course{
@Override
public void desc() {
System.out.println("这是数学课");
}
}
//英语课类
public class English implements Course{
@Override
public void desc() {
System.out.println("这是英语课");
}
}
三、定义一个工厂类来管理上边声明的实体类
//定义工厂类
public class MyFactory {
public static Course selectCourse(String type) {
Course course = null;
switch (type) {
case "chinese":
course = new Chinese();
break;
case "math":
course = new Math();
break;
case "english":
course = new English();
break;
}
return course;
}
}
这样我们只需要传入类型就能获取相应的类对象了。
四、客户端调用
public class TestDemo {
public static void main(String[] args) {
Course course1 = MyFactory.selectCourse("chinese");
Course course2 = MyFactory.selectCourse("math");
Course course3 = MyFactory.selectCourse("english");
course1.desc();
course2.desc();
course3.desc();
}
}
执行结果
简单工厂设计模式的优点: 对于客户端来说,去除了具体的类的依赖;无需提供具体的类名,只需要调用工厂类传入相应的参数就可以得到相应的实体类;
简单工厂设计模式的缺点: 就是每需要增加一个实体类,就需要去修改工厂类中的方法,可扩展性差;不同的产品需要不同额外参数的时候不支持;耦合性高,违反了开—闭原则。
了解了简单工厂设计模式,下文我们来切入正题,讲讲工厂模式是怎样实现的。如果你有不同的意见或者更好的idea,欢迎联系阿Q,添加阿Q可以加入技术交流群参与讨论呦!