设计模式个人理解【持续更新】
关于设计模式的一些个人理解以及示例代码。会持续的进行更新上传。
所有的实例已经提交到git中。
1 抽象工厂模式
抽象工厂模式的详情介绍请查看:
抽象工厂模式介绍【菜鸟教程】
个人理解:
/*** @program: springbootdemo* @description: 抽象工厂模式测试类** 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。* 何时使用:系统的产品(A)有多于一个的产品族(B),而系统只消费其中某一族的产品(C)。** 本例中:* 超级工厂(A);pc基础厂商* 其他工厂(B):Dell(戴尔)、HP(惠普)* 戴尔会生产戴尔的电脑产品、惠普会生产惠普的电脑产品(C)。** 电脑看为一个大的系统(A),而有很多厂商(B)生产自己品牌的产品(C).* 就像生活中的我们去淘宝某品牌的旗舰店去买东西,该店肯定是只售卖本品牌的产品,而我们买到的也肯定是该品牌的产品,不能买到其他品牌的产品。** @author: lidongsheng* @createData: 2019-11-19 17:15* @updateAuthor: lidongsheng* @updateData: 2019-11-19 17:15* @updateContent: 抽象工厂模式测试类* @Version: 1.0.0* @email: lidongshenglife@163.com* @blog: www.b0c0.com* ************************************************* Copyright @ 李东升 2019. All rights reserved* *************************************************/public class TestMain {public static void main(String[] args) {HPFactory hpFactory = new HPFactory();Mouse HPMouse = hpFactory.creatMouse();Keybo HPkeybo = hpFactory.creatKeybo();HPMouse.say();HPkeybo.say();DellFactory dellFactory = new DellFactory();Mouse DellMouse = dellFactory.creatMouse();Keybo DellKeybo = dellFactory.creatKeybo();DellMouse.say();DellKeybo.say();}
}
该实例请查看git地址:
抽象工厂模式实例
2 桥接模式
桥接模式的详情介绍请查看:
桥接模式介绍【菜鸟教程】
个人理解:
package com.lds.springbootdemo.designPatterns.Bridge;/*** @program: springbootdemo* @description: 桥接模式测试类** 当一种事物可在多种维度变化(如3个维度(m),每个维度3种可能(n))时,如果为每一种可能创建一个子类,则每增加一个维度上的可能需要增加多个类,* 这会造成类爆炸(总共所需类:M的n次方)。并且非常多的重复功能。* 若使用桥接模式(总共所需类:m*n+n+1,使用类聚合,而非继承,将可缓解类爆炸,并增强可扩展性。** 本测试中的桥接模式例子为把汽车拆成了三个维度,按品牌分(BMW、DF)、按挡位分(自动、手动)、按排量分(大、中、小)。这三个维度可以任意的进行组合。* 而我们如果要是想给某个维度增加一个可能的时候(比如挡位维度增加一个半自动),我们只需新建一个实现类(TransmissionSemiAuto)继承Transmission,* 其他的逻辑不用变就可实现。** 其实生活中的类似于组装的杂牌电脑,电脑的每一个模块(网卡、cpu、显卡、风扇等等)其实就是不同的维度。* 而我们在选择的时候,会有各种品牌或者型号的模块(网卡、cpu、显卡、风扇等等)。所以我们最终可以组装出很多种可能的电脑。* 如果要是新增一个维度的话就必须在桥接类中(本例的桥接类就是AbstractCar)设置一下相应的维度即可,最好是在设计之初就把所有的要拆分的维度分析清楚** @author: lidongsheng* @createData: 2019-11-20 18:34* @updateAuthor: lidongsheng* @updateData: 2019-11-20 18:34* @updateContent:* @Version: 1.0.0* @email: lidongshenglife@163.com* @blog: www.b0c0.com* ************************************************* Copyright @ 李东升 2019. All rights reserved* *************************************************/public class TestMain {public static void main(String[] args) {AbstractCar bmwCar=new CarBMW();bmwCar.setDisplacement(new DisplacementBig());bmwCar.setTransmission(new TransmissionAuto());bmwCar.run(5);}
}
该实例请查看git地址:
桥接模式实例
更新中。。。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
