设计模式个人理解【持续更新】

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 条评论 “设计模式个人理解【持续更新】”