【设计模式】

锐捷交换机路由器配置全攻略:从基础命令到高级功能(附常用命令速查表) 本文提供锐捷交换机路由器配置全攻略,涵盖从基础命令到高级功能的详细指南,包括VLAN划分、DHCP配置、链路聚合等实用技巧,并附常用命令速查表,帮助网络管理员快速掌握锐捷设备运维。 阅读详情

软件设计的6大基本原则SOLID

1、Single单一性原则

一个类只负责一类方法的封装,一个方法只负责单一的功能的封装。

该原则是高内聚,低耦合的基础。高内聚指功能相同的方法内聚在同一个类中,共同完成一个功能的代码块聚合在一个方法中;低耦合指一个类之间的方法尽量少的相互调用,修改一个方法不会或者很少的影响另外一个方法。

2、Open&Close 开闭原则

对扩展开放,对修改关闭。由于旧代码已经经过测试和实践检验,不能对旧代码进行修改,而是只能在旧代码基础上进行扩展,添加新的代码,而非修改旧的代码。

3、里氏替换原则LSP

父类出现的地方,都可以用子类进行替换。比如MVC模式中,Controller层通过统一的接口调用具体实现类的方法,而非通过具体的实现类。这里所有的父类接口都可以用具体的子类进行替换。

4、Interface接口隔离原则

不同功能之间尽量使用接口隔离,对外不暴露不会使用的接口。

5、依赖倒置原则

高层不依赖于底层模块,而是依赖于其抽象;针对抽象编程,而非针对具体。具体表现之一是:父类按照接口调用子类,而非通过具体类。

6、迪米特法则------最少知道法则

一个类的实体应该尽量少的与另一个类发生联系。

设计模式的分类

构建型:用于构建复杂的对象,比如建造者模式,工厂模式

结构型:关注类和对象的组合,比如适配器模式,外观模式

行为型:关注对象之间的通信,比如观察者模式,迭代器模式

单例模式

在系统中,部分关键资源只能有一份,比如单一日志文件的文件对象,mysql自增主键的主键值分发器,redis连接器等,这时应该使用单例模式

单例模式有两种实现:

1、懒汉模式:第一次使用时创建

2、饿汉模式:类加载时创建

下方是代码:

/**
 * 单例模式 ------> 懒汉实现
 */

public class SingletonLazy {
    private static volatile SingletonLazy instance;
    private SingletonLazy(){

    }

    /**
     * 线程不安全的方法
     * 存在线程安全问题
     * @return
     */
    public static SingletonLazy getInstance1(){
        if (instance == null)
            instance = new SingletonLazy();
        return instance;
    }

    /**
     * 方法加锁,没有线程安全问题
     * 但是synchronized对方法加锁加锁会导致较大的性能开销
     * 使用DCL双重锁定检查
     */
    public static SingletonLazy getInstance2(){
        if (instance == null){
            synchronized(SingletonLazy.class) {
                if (instance == null)
                   instance = new SingletonLazy();
            }
        }
        return instance;
    }





}
/**
 * 饿汉模式:在类加载时就创建单例对象
 * 优点:不涉及线程同步问题,实现简单
 * 缺点:拖慢加载速度,浪费内存(在不用该对象时创建了该对象)
 */
public class SingletonHungry {
    private static SingletonHungry instance = new SingletonHungry();
    private SingletonHungry(){}
    private SingletonHungry getInstance(){
        return instance;
    }
}

工厂模式

工厂模式将对象的创建和对象的使用分离开,使得对象的创建和使用分别更加容易修改而不会影响对方。

1、简单工厂模式

有一个工厂,通过静态方法传入参数,返回不同的商品;这些商品是同一类,继承同一个接口。

package factory;
//公共接口

public interface Pay {
    /**
     * 统一下单接口
     */
    void unifiedorder();
}

商品1:阿里pay

package factory;

public class AliPay implements Pay {

    @Override
    public void unifiedorder() {
        System.out.println("支付宝统一下单");
    }
}

商品2:微信pay

package factory;

public class WechatPay implements Pay {
    @Override
    public void unifiedorder() {
        System.out.println("微信支付统一下单接口");
    }
}

工厂:

public class SimplePayFactory {
    public static Pay createPay(String payType){
        if (payType == null) return null;
        if (payType.equalsIgnoreCase("WECHAT PAY"))
            return new WechatPay();
        else if (payType.equalsIgnoreCase("ALI PAY"))
            return new AliPay();
        //需要扩展时,需要修改代码,添加更多if
        return null;
    }

}

简单工厂模式的缺点:在添加产品时需要修改工厂的代码;工厂的负担过重,商品生产全部集中在工厂中。

2、工厂方法模式

在简单工厂的基础上,将工厂也抽象出来,出现了多个工厂建造不同类的产品,这些工厂也继承同一个接口。带来的好处是:在添加工厂时,不需要修改原有的代码;

商品同上

工厂的接口及其实现:

package factory.method;

import factory.Pay;

public interface PayFactory {
    Pay getPay();
}
package factory.method;

import factory.AliPay;
import factory.Pay;

public class AliPayFactory implements PayFactory{

    @Override
    public Pay getPay() {
        return new AliPay();
    }
}
package factory.method;

import factory.AliPay;
import factory.Pay;

public class AliPayFactory implements PayFactory{

    @Override
    public Pay getPay() {
        return new AliPay();
    }
}

调用:

package factory.method;

import factory.Pay;
import factory.simple.SimplePayFactory;

public class Main {
    static public void main(String[] arg){
        PayFactory payFactory = new AliPayFactory();
        Pay pay = payFactory.getPay();
        pay.unifiedorder();
    }
}

抽象方法模式的缺点:当增加商品时,仍然需要修改代码。

3、抽象工厂方法模式

添加一个统一的建造工厂的工厂,利用简单工厂模式生产不同的工厂;这些工厂也同样继承了同样的接口,能够用同样的接口生产商品;每一个工厂可以生产多种商品,这些商品实现同一种接口

建造工厂的工厂:

package factory.abstractf;

public class FactoryProducer {
    static OrderFactory getFactory(String type){
        if (type.equalsIgnoreCase("wechat"))
            return new WechatOrderFactory();
        else if (type.equalsIgnoreCase("ali"))
            return new AliOrderFactory();
        return null;
    }
}

工厂的接口(工厂生产2中产品,Pay和Refund)

package factory.abstractf;

import factory.Pay;
import factory.Refund;

public interface OrderFactory {
    Pay getPay();
    Refund getRefund();
}

工厂的实现

package factory.abstractf;

import factory.Pay;
import factory.Refund;

public class AliOrderFactory implements OrderFactory{
    @Override
    public Pay getPay() {
        return null;
    }

    @Override
    public Refund getRefund() {
        return null;
    }
}
package factory.abstractf;

import factory.Pay;
import factory.Refund;

public class WechatOrderFactory implements OrderFactory {
    @Override
    public Pay getPay() {
        return null;
    }

    @Override
    public Refund getRefund() {
        return null;
    }
}

商品的接口

package factory;

public interface Pay {
    /**
     * 统一下单接口
     */
    void unifiedorder();
}
package factory;

public interface Refund {
    void unifiedrefund();
}

商品的实现有:AliPay、AliRefund、WechatPay、WechatRefund

*********************************************************************************

未完待续

*********************************************************************************

MATLAB下pdf文件操作读取示例 当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。 阅读详情

相关推荐

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7732

DeepSeek V4实测:稀疏注意力机制下的API调用避坑指南

大模型的‘百万上下文’能力并非简单堆叠token,其底层依赖稀疏注意力机制(如DSA)实现长文本高效处理。该机制通过语义块划分重构模型记忆方式,带来推理行为变异、header校验强化、prompt引导依赖等工程新范式。技术价值在于平衡推理质量与成本效率,尤其在代码审查、文档分析、IDE实时补全等场景中,需适配块感知型输入与精确参数配置。本文聚焦DeepSeek V4系列(V4-Pro/V4-Flash)在真实生产环境中的API对接、错误诊断与性能调优,覆盖Claude Code兼容接入、LangChain定

weixin_30379531的博客 482

谷歌倾斜摄影数据获取以及转换3DTiles介绍

解析谷歌倾斜模型数据,再一键设置无人值守的情况下,快速将谷歌倾斜摄影模型数据转成3DTiles数据,并在Cesium上进行流畅漫游缩放显示,效果优于官方3DTiiles格式数据

cyber_room的博客 5335

设计模式六大原则之单一性原则

单一性原则一般指设计接口时,接口的功能单一不可分。目的还是提高接口的通用性,做到实现一个接口,其方法尽量都可以用的到。 比如有个需求:猫可以吃饭,睡觉,抓老鼠 我们定义一个接口实现来实现其方法: 定义了其接口之后,我们实现它 这样我们便实现了这个功能 但是,如果是一条狗了?狗可以吃饭睡觉,但是不可以抓老鼠,所以我们要确定狗的行为的时候是需要重新写个接口,但是狗也有吃饭和睡觉的公用功能,如果单独写的话会造成代码大量冗余。而且ICanDo接口的扩展性也会变得比较弱。所以我们可以把ICanDo接口拆分成两.

weixin_44699728的博客 2717

VINS技术路线与代码详解

VINS技术路线 写在前面:本文整和自己的思路,希望对学习VINS或者VIO的同学有所帮助,如果你觉得文章写的对你的理解有一点帮助,可以推荐给周围的小伙伴们,当然,如果你有任何问题想要交流,欢迎随时探讨。话不多说,下面上正文。 VINS代码地址:https://github.com/HKUST-Aerial-Robotics/VINS-Mono 参考文档:1.VINS-Mono A R...

wangshuailpp的博客 7万+

人大金仓V8R3企业版License更新全攻略:从查看到重启一步到位

本文详细解析了人大金仓V8R3企业版License更新的完整运维流程,涵盖从诊断当前授权状态、获取与验证新文件、精准定位旧文件路径,到安全替换文件及服务重启验证的全过程。重点针对更新流程中常见的版本匹配、文件定位、权限与服务重启等关键环节提供了实战解决方案和避坑指南,帮助运维人员高效、平稳地完成授权续期。

redis7keeper的博客 894

7.设计模式之单一原则:如何跳出错误抽象的误区?

设计模式之单一原则

卜卦的博客 405

hdu 1195 Open the Lock(bbfs(双向广搜))

<br />第一次使用双向广搜算法求解,感觉效率的确提高了不止两倍。刚开始的一直WA,后来发现是每次都要扩展一层的节点,然后在扩展另一层的节点,而不是每次只扩展一个节点。<br /> /* Author: ACb0y Date: 2010-9-21 Type: bbfs(双向广搜) ProblemId: hdu 1195 Open the Lock Result: AC */ #include <iostream> #include <queue> using namespace

个人独立博客http://www.acb0y.cn/ 1526

设计原则 | 单一职能原则

在SRP中,将职责定义为"变化的原因"。如果你能想到多于一个的动机去改变一个类,那么这类就具有多于一个的职责。

个人技术博客 330

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

AXI-5.6 Multiple region interfaces

规则:如果从设备实现的区域少于16个,它必须确保对任何访问未支持区域的尝试都能给出符合协议的响应。具体实现方式由设计者定义。场景:一个错误的软件驱动试图向区域 5(该加密加速器未实现)写入数据。实现方式一:提供错误响应(严格模式)行为:加密加速器检测到AxREGION的值大于2,立即对该事务返回一个DECERR(解码错误)或SLVERR(从设备错误)响应。举例:这类似于你访问一个不存在的网站,服务器返回“404 Not Found”。它明确告知请求者:“你要找的东西不存在”。优点安全、清晰。

weixin_44700185的博客 671

23种设计模式-单一原则

单一原则

qq_32923295的博客 1061

反应动力学仿真软件:ChemkinPro_(11).敏感性分析

敏感性分析是化学反应动力学仿真中的一项重要技术,通过对模型参数的变化对模型输出的影响进行评估,可以帮助研究人员优化模型、验证实验数据和评估不确定性。ChemkinPro 提供了强大的敏感性分析功能,可以方便地进行参数选择、仿真设置和结果解读。通过实际案例研究,我们可以看到敏感性分析在燃烧、催化和环境化学等领域的广泛应用,为科学研究和工程应用提供了有力支持。

kkchenjj的博客 1306

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1871

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1057

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

设计模式DesignPattern【1】

设计模式是对于反复出现的问题的解决方案,是关于如何解决某些问题的指南。它们不是可以插入应用程序中的类、包或库。相反,这些是关于如何在某些情况下解决某些问题的指导方针,是一种思想方面的东西。设计模式是软件设计中常见问题的典型解决方案。它们就像预制的蓝图,你可以对其进行自定义以解决代码中反复出现的设计问题。

2301_80272161的博客 1106

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目 项目介绍 该项目由 Github 用户 micooz 维护,是针对软件开发中常见设计模式的实现集合。它旨在提供一个学习和理解各种设计模式的实战平台,涵盖了从单例模式到观察者模式等二十多种经典设计模式。通过此仓库,开发者可以深入学习每种模式的概念、应用场景及其实现细节,助力提升代码质量和可维护性。 项目快速启动 环境要求...

gitblog_00751的博客 818

DesignPattern 开源项目教程

DesignPattern 开源项目教程 1. 项目的目录结构及介绍 DesignPattern 项目的目录结构如下: DesignPattern/ ├── src/ │ ├── AbstractFactory/ │ ├── Adapter/ │ ├── Bridge/ │ ├── Builder/ │ ├── ChainOfResponsibility/ │ ├── Co...

gitblog_00406的博客 558

探索设计模式的艺术:JackChan1999的DesignPattern项目

探索设计模式的艺术:JackChan1999的DesignPattern项目 在编程的世界中,设计模式是解决问题的利器,是经验与智慧的结晶。今天我们要介绍的开源项目【DesignPattern】,是由开发者JackChan1999精心编写的,旨在帮助程序员理解和应用各种设计模式。 项目简介 这个项目是一个全面的设计模式参考库,包含了GOF的23种经典设计模式,以及一些现代编程中的新型模式。每一种模...

gitblog_00018的博客 493

开源项目 DesignPattern 使用教程

开源项目 DesignPattern 使用教程 1. 项目的目录结构及介绍 DesignPattern/ ├── src/ │ ├── creational/ │ │ ├── abstract_factory/ │ │ ├── builder/ │ │ ├── factory_method/ │ │ ├── prototype/ │ │ └── sing...

gitblog_00818的博客 367

DesignPattern 项目教程

DesignPattern 项目教程 1. 项目目录结构及介绍 DesignPattern/ ├── abstractFactory/ ├── adapter/ ├── bridge/ ├── factory/ ├── prototype/ ├── proxy/ ├── singleton/ ├── state/ ├── strategy/ ├── LICENSE └── README.md ...

gitblog_00077的博客 418

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南

推荐开源项目:DesignPattern —— 翻越编程丛林的设计模式指南 在编程的世界里,设计模式就像是一座座灯塔,引导开发者们在复杂系统中找到最佳实践和解决方案。今天,我们向您隆重推荐一个开源项目——DesignPattern,它是由FengJungle发起并维护的一系列关于设计模式的讲解与实现。这个项目不仅提供了详尽的理论知识,还辅以实际代码示例,帮助开发者从实践中理解并掌握设计模式。 项目...

gitblog_00021的博客 438

设计模式 - DesignPattern

1.设计模式的分类?     设计模式分为三大类:     创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。     结构型模式,共七种:适配器模式,装饰模式,代理模式,外观模式,桥接模式,组合模式,享元模式。     行为型模式,共十一种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命名模式,                            ...

lanhai_scut的博客 365

彻底搞懂设计模式DesignPattern-23种设计模式整理

设计模式介绍 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案, 设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂 度。 <<设计模式>> 是经典的书,作者是 Erich Gamma、 Richard Helm、 Ralph Johnson 和 John Vlissides

Ping 1105

13.DesignPattern设计模式(by-朝夕)

DesignPattern前言1. DesignPattern? 前言 DesignPattern 1. DesignPattern?

王永安的博客 809

DesignPattern设计模式-总览

设计模式总览及设计模式六大原则

Fuck Job interview! 445
上一篇: Mybatis 自动类型转换
下一篇: Libevent安装
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值