学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
文章目录
- 实例:
- 目的:
- 适用场景:
- 优点:
- 弊端:
- 类图:
- 框架用到的地方:
- Coding:
- 测试:
- 测试结果:
实例:
通过不同的造车工厂,生产不同配置的不同车型
目的:
小轿车会根据普通零件区分不同车型,但SUV现阶段还只有一款车型,此时如果我们还使用“工厂方法模式”想更换工厂就有可能会对后面的逻辑代码造成影响,所以我们需要再将“工厂”抽象出来。让具体工厂实现工厂接口,这样即使更换其他实现了超级工厂的其他造车工厂,也不会对后面的代码逻辑造成影响「围绕一个“超级工厂”创建“其他工厂”」
适用场景:
A产品需要创建一系列的产品,B产品也需要创建一系列的产品,且它们创建的系列产品都是相同的,只是在实现上不同。那么对于创建这种“产品系列”(产品家族)的情况,我们就可以使用抽象工厂模式。
优点:
满足开闭原则、依赖倒置原则
弊端:
如果新增抽象工厂方法,需要修改的地方很多,所以抽象工厂模式不适用于新增纵向拓展的功能
类图:
框架用到的地方:
日志记录、数据库访问等
Coding:
IFactory:
public interface IFactory {Car creatCar(Integer flg);
}
Car接口:
public interface Car {void creat();
}
SmallCar:
public abstract class SmallCar implements Car {abstract String engine();abstract String wheel();
}
国产车:
public class GCSmallCar extends SmallCar {@Overridepublic void creat() {System.out.println("造一台" + this.engine() + "+" + this.wheel() + "的国产车");}@OverrideString engine() {return "国产发动机";}@OverrideString wheel() {return "国产轮胎";}
}
合资车:
public class HZSmallCar extends SmallCar{@Overridepublic void creat() {System.out.println("造一台" + this.engine() + "+" + this.wheel() + "的合资车");}@OverrideString engine() {return "合资发动机";}@OverrideString wheel() {return "合资轮胎";}
}
SUV:
public class SUV implements Car{@Overridepublic void creat() {System.out.println("造一台SUV");}
}
SmallCarFactory:
public class SmallCarFactory implements IFactory{@Overridepublic Car creatCar(Integer flg) {switch (flg){case 1:return new GCSmallCar();case 2:return new HZSmallCar();default:return new GCSmallCar();}}
}
SUVCarFactory:
public class SUVFactory implements IFactory{@Overridepublic Car creatCar(Integer flg) {return new SUV();}
}
测试:
public class Test {public static void main(String[] args) {IFactory iFactory = new SmallCarFactory();Car car = iFactory.creatCar(2);car.creat();}
}
测试结果:
造一台合资发动机+合资轮胎的合资车
文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉