1+
关于设计模式的一些个人理解以及示例代码。会持续的进行更新上传。
所有的实例已经提交到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地址:
更新中。。。
1+
3 条评论 “设计模式个人理解【持续更新】”
学习了
I am no longer positive the place you are getting your information, but great topic. I must spend some time studying more or understanding more. Thank you for great information I used to be in search of this information for my mission. Cleopatra Claudio Favian
Thanks so much for the post. Really looking forward to read more. Great. Anthea Mickey Almeria