关于设计模式的一些个人理解以及示例代码。会持续的进行更新上传。
所有的实例已经提交到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地址:
更新中。。。