![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
design_pattern
文章平均质量分 78
Maggieq8324
万事从未风过耳,一生只是梦游身
展开
-
设计模式 - 桥接模式
角色名称释义抽象类用于定义抽象类的接口,它一般是抽象类而不是接口,其中定义了一个Implementor(实现类接口)类型的对象并可以维护该对象,它与Implementor之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法扩充抽象类扩充由Abstraction定义的接口,通常情况下它不再是抽象类而是具体类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以调用在Implementor中定义的业务方法实现类接口。原创 2022-10-23 18:45:16 · 1076 阅读 · 0 评论 -
设计模式 - 组合模式
角色名称释义Component抽象构件可以是接口或抽象类,为叶子构件和容器构件对象声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构件中定义了访问及管理它的子构件的方法,如增加子构件、删除子构件、获取子构件等Leaf叶子构件它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为。对于那些访问及管理子构件的方法,可以通过异常等方式进行处理Composite容器构件。原创 2022-09-27 21:47:27 · 376 阅读 · 0 评论 -
设计模式 - 享元模式
角色名称释义Flyweight抽象享元类通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)具体享元类它实现了抽象享元类,其实例称为享元对象;在具体享元类中为内部状态提供了存储空间。通常我们可以结合单例模式来设计具体享元类,为每一个具体享元类提供唯一的享元对象非共享具体享元类并不是所有的抽象享元类的子类都需要被共享,不能被共享的子类可设计为非共享具体享元类;原创 2022-08-21 22:00:51 · 413 阅读 · 0 评论 -
设计模式 - 适配器模式
优点1.能提高类的透明性和复用,现有的类复用但不需要改变2.目标类和适配器类解耦,提高程序扩展性3.符合开闭原则缺点1.适配器编写过程需要全面考虑,可能会增加系统的复杂性2.增加系统代码可读难度适用场景1.已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)2.不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案适配器模式源代码。...原创 2022-07-31 22:05:52 · 473 阅读 · 0 评论 -
设计模式 - 装饰模式
目录实例数据加密解决方案需求变更装饰模式概念装饰模式解决方案总结源码实例数据加密假设一个数据加密的应用场景,可以对字符串进行加密,用户先使用最简单的加密算法对字符串进行加密,如果觉得不够,可以对加密后的结果使用MD5、AES、RSA等加密算法进行二次加密解决方案Encrypt.java/** * @Description 加密 */public class Encrypt { public String encrypt(String str) { return原创 2022-04-12 23:17:59 · 691 阅读 · 0 评论 -
设计模式 - 外观模式
目录实例手机一键备份功能常规的解决方案外观模式概念外观模式解决方案方案的演进(配置文件)抽象外观类总结源码实例手机一键备份功能假设一个智能手机一键备份数据的应用场景,该功能可以将手机中的通讯录,短信,照片,歌曲等资料一次性备份,在实现过程中需要与多个已有的子系统进行交互,如通讯录子系统、短信子系统等乍一看该应用场景,如果再添一句需充分考虑系统的灵活性和可扩展性那就与工厂方法模式很类似了,但这里不考虑应用的扩展,只考虑应用的交互常规的解决方案AddressBookService.java/原创 2022-03-31 07:17:42 · 1020 阅读 · 0 评论 -
设计模式 - 原型模式
目录概念编码实例浅克隆深克隆对于引用类型单独克隆序列化实现深克隆总结源码概念原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过克隆这些原型创建新的对象原型模式是一种对象创建型模式原型模式最典型的例子就是孙悟空用猴毛复制出和自己一模一样的分身来,通过原型对象克隆出多个一模一样的对象就是原型模式编码实例通过原型模式实现销售管理系统中的客户类(Customer)Customer.java/** * @Description 客户 */publ原创 2022-03-28 18:24:45 · 524 阅读 · 0 评论 -
设计模式 - 单例模式
目录实例数据库连接池单例模式概念懒汉式单例(LazySingleton)懒汉式单例DoubleCheck双重检查(LazyDoubleCheck)饿汉式单例(HungrySingleton)静态内部类单例(StaticInnerClassSingleton)Enum枚举单例(EnumInstance)ThreadLocal单例(ThreadLocalInstance)容器单例(ContainerSingleton)总结扩展序列化破坏单例模式反射攻击单例模式反射攻击饿汉式反射攻击懒汉式反射攻击枚举单例序列化破原创 2022-03-15 23:19:24 · 1315 阅读 · 0 评论 -
设计模式 - 建造者模式
目录实例软件界面多种显示模式建造者模式概念解决方案方案的演进(配置文件)建造者模式(链式调用)总结源码实例软件界面多种显示模式假设一个视频播放软件提供多种界面显示模式的应用场景,该软件支持完整模式、精简模式、记忆模式等;在不同的显示模式下主界面的组成元素有所差异,如:在完整模式下显示主菜单、播放列表、主窗口、控制条;在精简模式下只显示主窗口、控制条;在记忆模式下显示主窗口、控制条、收藏列表软件结构示意图如下:可以看出,显示模式是一个复杂对象,包含主菜单、播放列表、主窗口、控制条等多个组成部分原创 2022-03-07 10:51:46 · 503 阅读 · 0 评论 -
设计模式 - 抽象工厂模式
目录实例手机软件初始化工厂方法模式解决方案抽象工厂模式概念抽象工厂模式解决方案方案的演进(配置文件)总结源码实例手机软件初始化假设一个手机软件初始化的应用场景,该软件支持IOS、Android、Windows等多个操作系统平台,针对不同的操作系统,该软件提供了不同的操作功能(Operation)类和操作界面(Surface)类,并提供相应的工厂类来封装这些类的初始化过程。软件要求具有较好的扩展性以支持新的操作系统平台软件结构示意图如下:工厂方法模式解决方案初始解决方案采用工厂方法模式,原创 2022-03-05 20:13:50 · 3076 阅读 · 0 评论 -
设计模式 - 工厂方法模式
目录实例图片读取器简单工厂解决方案工厂方法模式概念工厂方法解决方案方案的演进(配置文件)总结源码实例先看一个例子图片读取器设计一个可以读取不同类型图片格式的程序,针对每种图片格式都需要一个图片读取器,如GIF读取器用于读取GIF图片,JPG读取器用于读取JPG图片,需充分考虑系统的灵活性和可扩展性简单工厂解决方案使用简单工厂的解决方案大致如下:Img.java/** * @Description 图片 */public abstract class Img { /**原创 2022-03-03 06:50:12 · 952 阅读 · 0 评论 -
设计原则 - 里氏替换原则
目录概念编码实例里氏替换原则总结源码概念里氏替换原则(Liskov Substitution Principle, LSP):一个软件实体如果适用一个父类的话,那一定适用于其子类,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。里氏替换原则表眀,在软件中将一个基类对象替换成他的子类对象,程序将不会产生任何错误和异常,反之则不成立;如果一个软件实体使用的是一个子类对象,那么它不一定能够使用基类对象。例如,张三喜欢动物,那张三一定喜欢狗,因为狗是动物的子类原创 2022-01-10 07:04:09 · 491 阅读 · 0 评论 -
设计模式 - 简单工厂
目录实例图表库简单工厂模式概念解决方案方案的改进总结源码实例图表库开发人员希望开发一套灵活易用的图表库,可以为应用系统提供各种不同外观的图表,如:柱状图,饼图,折线图等。初始设计方案将所有的图表实现代码封装在一个Chart类中,其代码如下:Chart.javapublic class Chart { /** * 图表类型 */ private String type; /** * 初始化图表 * @param type原创 2021-12-21 06:52:20 · 233 阅读 · 0 评论 -
设计原则 - 合成复用原则
目录概念编码实例合成复用原则源码概念合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合(contains-A)/聚合(has-A),而不是继承关系达到软件复用的目的。合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用功能的目的。优点:可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。合成复用是达到开闭原则的一种实现原创 2021-12-20 10:23:47 · 1109 阅读 · 0 评论 -
设计原则 - 迪米特法则
目录概念编码实例迪米特法则实现源码概念迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。核心观念:类之间的解耦,尽量降低类与类之间的耦合。优点:降低类之间的耦合。强调:只和朋友(出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而出现在方法体内部的类不属于朋友类)交流,不和陌生人说话。编码实例Boss给Leader下达获取课程数的指令Boss.java/** * @Description Boss * @date原创 2021-12-07 11:11:00 · 307 阅读 · 0 评论 -
设计原则 - 接口隔离原则
目录概念编码实例接口隔离原则的实现源码概念定义:Interface Segregation Principle,ISP,使用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口一个类对一个类的依赖应该建立在最小的接口上建立单一接口,不要建立庞大臃肿的接口尽量细化接口,接口中的方法尽量少注意适度原则,一定要适度优点:符合常说的高内聚低耦合的设计思想,从而使类具有更好的可读性、可扩展性和可维护性编码实例IAnimalAction.java/** * @Descr原创 2021-12-07 07:01:59 · 232 阅读 · 0 评论 -
设计原则 - 单一职责原则
目录概念编码单一职责的体现(类)实例改进单一职责的体现(接口)实例改进源码概念定义:单一职责原则(Single Responsibility Principle,SRP),一个类只负责一个功能领域中的相应职责,不要存在多余一个导致类变更的原因。核心思想:一个类不应该承担过多的职责。在软件系统中,一个类承担的职责越多,其被复用的可能性就越小,且其中一个职责发生变化时,可能会影响其它职责的运作,因此需要将职责进行分离封装在不同的类中。单一职责原则用于控制类的粒度大小,是实现高内聚,低耦合的指导方针。原创 2021-12-06 22:44:22 · 456 阅读 · 0 评论 -
设计原则 - 依赖倒置原则
目录概念实例代码实例开闭原则的实现源码概念依赖倒置原则的定义:Dependency Inversion Principle,DIP,高层模块不应该依赖低层模块,二者都应该依赖其抽象。依赖倒置原则的中心思想:抽象不应该依赖细节;细节应该依赖抽象。依赖倒置原则的核心思想:针对接口编程,不要针对实现编程。依赖倒置原则的优点:可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。如果说开闭原则是面向对象设计的目标,依赖倒置原则就是面向对象设计的主要实现机制之一,它原创 2021-12-06 06:46:33 · 1183 阅读 · 0 评论 -
设计原则 - 开闭原则
目录概念实例代码实例需求变更开闭原则的实现源码概念开闭原则的定义:Open-Closed Principle,OCP,一个软件实体应当对扩展开放,对修改关闭。开闭原则的中心思想:用抽象构建框架,用实现扩展细节。开闭原则的优点:提高软件系统的可复用性及可维护性实现开闭原则的核心思想:面向抽象编程。一句话理解:软件实现应对扩展开放,对修改关闭实例代码实例以慕课网课程举例ICourse.java/** * @Description 课程 * @date Aug 27, 2原创 2021-12-03 11:29:50 · 623 阅读 · 0 评论