闽清县建设局网站,商城网站建设需求分析,海外购物网,怎么在网上创建网站学会设计模式#xff0c;你就可以像拥有魔法一样#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们#xff08;GoF#xff09;凝聚出来的最佳实践#xff0c;可以提高代码的可读性、可维护性和可重用性#xff0c;从而让我们的开发效率更高。通…
学会设计模式你就可以像拥有魔法一样在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们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();}
}测试结果
造一台合资发动机合资轮胎的合资车文章后期会持续优化如果觉得小名的文章帮助到了您请关注小名支持一下小名给小名的文章点赞、评论✍、收藏谢谢大家啦~♥♥♥ 编码魔法师系列文章会收录在小名的【设计模式】专栏中希望大家可以持续关注