对于“设计模式”这个词大家肯定都不陌生,很多框架也用到了设计模式,但是大部分的开发者应该是没有深入的了解过,我准备硬肝下这23设计模式作为专题文章的开端,一共23种设计模式,我尽量在<23天肝完。
为什么要学习设计模式:https://blog.csdn.net/kaituozhe_sh/article/details/107922339
在我大学四年,对设计模式也没有什么概念,写代码就想着能实现就可以了,不会有设计模式那样的思想,但是当学习到了框架的时候,对于设计模式才有了一些更深入的了解,使用设计模式的代码在扩展性上会比暴力的代码更容易维护,特别是当一个程序猿离职了后,你去接手它的代码,里面是一大堆if else,这样真的会崩溃,修改都不知道从何下手
硬肝系列目录
创建型模式
结构型模式
行为型模式
一、工厂模式
工厂模式:实现创建者和调用者的分离。
1.简单工厂模式
简单工厂模式下面代码为例:
建造类接口:
public interface build {
void build();
}
建造火车实现类:
public class buildTrain implements build{
@Override
public void build() {
System.out.println("建造一辆火车");
}
}
建造飞机实现类:
public class buildPlane implements build{
@Override
public void build() {
System.out.println("建造一架飞机!!");
}
}
建造汽车实现类:
public class buildCar implements build{
@Override
public void build() {
System.out.println("建造一辆汽车");
}
}
最后简单工厂类实现:
public class SimpleFactory {
public static build getBuild(String type){
if("train".equals(type)){
return new buildTrain();
}else if("plane".equals(type)){
return new buildPlane();
}else if("car".equals(type)){
return new buildCar();
}
return null;
}
}
然后调用main方法测试:
public static void main(String[] args) {
Build build1 = SimpleFactory.getBuild("train");
build1.build();
Build build2 = SimpleFactory.getBuild("plane");
build2.build();
}
测试结果:
建造一辆火车
建造一架飞机!!
从这些代码我们可以看到,简单工厂实现起来容易,但是不易维护,如果需要建造零件呢?几百个零件就需要几百个if else吗?这显然是不现实的,简单工厂方法还破坏了面向对象设计的基本原则之一:OCP(开闭原则):一个软件的实体应当对扩展开放,对修改关闭。而工厂方法模式就很好的解决了这些问题。
2.工厂方法模式
同样是以建造为例
但是我们为每一个需要创造的东西都创建了一个工厂类,这样我们不到紧急时刻就可以不用修改之前的代码,而直接在老代码的基础上扩展实现更多的功能。
接口:
//我们为每一个实现类都创造了一个工厂,易于拓展
public interface BuildFactory {
Build buildFactory();
}
工厂实现类:
public class TrainFactory implements BuildFactory{
@Override
public Build buildFactory() {
return new buildTrain();
}
}
public class CarFactory implements BuildFactory{
@Override
public Build buildFactory() {
return new buildCar();
}
}
public class PlaneFactory implements BuildFactory{
@Override
public Build buildFactory() {
return new buildPlane();
}
}
使用main方法测试:
public static void main(String[] args) {
//直接创建了一个工厂,并直接调用工厂中的方法,方法返回值就是所需要建造的对象
Build buildFactory = new PlaneFactory().buildFactory();
//然后调用对象的方法即可
buildFactory.build();
}
测试结果:
建造一架飞机!!
工厂方法模式的
优点:
1.避免创建者与具体的产品逻辑相耦合;
2.满足单一职责,每一个业务逻辑的实现都可以在自己的类中完成
3.满足开闭原则,无需修改使用调用方就可以在程序中引入新的功能
缺点:
比如由非常多的零件类型,那么其实现的子类会迅速扩张,也需要其他的设计模式进行优化
完成:TO: 2021/3/15 00:07