设计模式
简单介绍23种设计模式
盼兮猫
长亭外 古道边 芳草碧连天
展开
-
12、组合模式
组合模式将对象组合成树状的结构,当我们访问某个对象时,对它包含的所有子对象一致访问,以此递归 举个例子:张三、李四都属于三班,当我们奖励三班时,同样也会奖励张三、李四。此时张三、李四就可以看做三班的子对象,当我们处理三班时,连同张三、李四一起调用 组合模式由几个模块组成: 抽象构件角色:为树叶构件角色和树枝构件角色提供接口 树叶构件角色:叶节点对象,不包含子对象 树枝构件角色:枝节点对象,包含子对象 下面通过简单示例认识组合模式: interface Component { void add(原创 2021-07-05 16:01:15 · 55 阅读 · 0 评论 -
11、享元模式
享元模式主要用于维护大量很类似的对象,保证每种只出现一次:在面向对象程序设计中,有时可能需要创建大量类似对象,这类对象只有部分属性不同,其它属性完全相同,如五子棋中的黑白棋,各对象之间只有颜色和坐标不同。对于这种情况就可以采用共享技术来复用重复对象,不同对象只保留一份,降低系统中对象个数,减少程序压力。 享元模式通常由以下几个模块组成: 抽象享元角色:所有享元对象的基石 具体享元角色:实现抽象享元角色接口,它只包含共享属性 非享元角色:不共享的属性,类似上面提到的颜色、坐标 享元工厂:通过工厂维护享元对象原创 2021-07-05 15:44:15 · 60 阅读 · 0 评论 -
10、外观模式
外观模式最常用也最简单,总得来说就是将多个方法封装在一个方法中,方便一起调用。基本只要用到封装或多或少会用到外观模式 举个例子:商城系统买一件商品通常包含以下操作: 生成订单 商品库存减一 财务系统记账等等 为了方便处理,我们把上述三个操作封装在一个方法中调用就叫外观模式。外观模式通常通过以下三部分组成: 客户:汇总方法调用方 外观角色:汇总方法 子系统:需要集成在一起的子方法 下面我通过一个示例介绍外观模式: */ class FacadeTest { private SubS原创 2021-07-05 15:26:27 · 53 阅读 · 0 评论 -
9、装饰器模式
装饰器模式:在不改变类结构的情况下,增添一部分新功能。 传统的装饰器模式基于继承实现,其中它主要包含以下几部分: 抽象构件:规范职责 具体构件:实现抽象构件 抽象装饰:实现抽象构件,并包含具体构件实例,通过其子类扩展具体构件的功能 具体装饰: 继承抽象装饰,实体具体增强方法 代码结构如下: interface Component { void operation(); } class ConcreteComponent implements Component { public Co原创 2021-06-28 11:30:37 · 63 阅读 · 0 评论 -
8、桥接模式
桥接模式官方给出的概念:将实体与抽象分离,使它们可以独立变化。对应到代码可以理解为将对象实体和属性分离,两者独立变化,避免使用多继承。 举个例子:笔包含多种类型:铅笔、圆珠笔、钢笔等等,每种类型又对应不同的颜色,红色、蓝色、黑色。。 如果使用多继承实现,最顶层定义笔抽象类,下一层继承实现铅笔、圆珠笔、钢笔,再下一层继承实现红色铅笔、蓝色铅笔等等。。。这种处理方式需要创建大量的类,并且一旦增加或者删除某个属性,都需要创建或者删除大量的类 为了解决该问题,我们可以把:类型、颜色抽象出来,使两者独立变化,避免使用原创 2021-06-28 10:51:14 · 66 阅读 · 0 评论 -
7、适配器模式
适配器模式就是让两个原来不兼容的接口兼容,它由以下三部分组成: 目标接口:需要适配的接口 适配者:被适配的类 适配器:通过继承或引用适配者属性的方式创建的新类 继承实现方式具体实现: public class ClassAdapter { interface Target { void request(); } class Adaptee { public void specificRequest() { Sys原创 2021-06-24 14:08:40 · 67 阅读 · 0 评论 -
6、代理模式
代理在日常生活中很常见,比如各种代售点、代购等等,从本质来说,都是为了方便。 Java 代码中的代理不是如此,它主要是为了保护被代理对象以及增强方法功能。 保护体现在客户端不能直接获取目标对象,只能获取代理类,通过代理类访问目标对象,隐藏具体实现细节。增强体现在可以增加部分其它逻辑,如打印日志操作,增强方法,实际上 Spring AOP 就是这样干的。 代理模式分以下几部分组成: 抽象主题类:被代理类的抽象接口或抽象类 真实主题类:被代理类的具体实现 代理类:提供接口,供客户端访问的代理类 具体代码结构原创 2021-06-24 11:52:05 · 63 阅读 · 0 评论 -
5、建造者模式
建造者模式和前面提到的四种设计模式有所不同: 单例模式主要确保对象唯一,单例类本身负责唯一对象的创建和维护 原型模式主要方便创建同类对象,核心在于 clone() 方法 工厂模式主要用于创建对象 总得来说,它们都主要封装创建对象这一步,而建造者模式主要优化创建对象这一步。一般情况下,建造者模式可以和其它设计模式配合使用,下面正式开始: 对于复杂对象,比如包含必填属性和非必填属性,一般有以下两种初始化方法: class A { // 必填 private int id; private String原创 2021-06-24 10:12:21 · 137 阅读 · 1 评论 -
4、抽象工厂模式
抽象工厂模式实际就是工厂方法模式的再改进,我们先简单聊聊工厂方法模式:原创 2021-06-24 09:26:12 · 75 阅读 · 0 评论 -
3、工厂方法模式
工厂方法模式由简单工厂模式进化而来,我们先说简单工厂模式。 工厂,顾名思义生产产品,根据客户的需要,生产对应的产品。对应到 java 代码:根据不同的参数,返回不同类型的对象。并且工厂一般只生产一类产品,饮品工厂不能生产衣服一个道理。java 工厂也只能生产一类对象,即包含公共父类: public class SimpleFactory { public interface Product { } public static class ProductA implements P原创 2021-06-23 18:14:28 · 58 阅读 · 0 评论 -
2、原型模式
原型模式的核心在于以某个对象为模板,创建多个类似对象 Java 代码通过 cloneable 接口实现原型模式,关于 cloneable 我之前单独介绍过,感兴趣的可以搜一下, 这里我只简单提一下原型模式实现: public class ProtoTypeCitation { public static void main(String[] args) throws CloneNotSupportedException { Citation citation1 = new Cita原创 2021-06-23 17:59:38 · 114 阅读 · 0 评论 -
1、单例模式
单例模式的核心在于某个类最多只包含一个实例,并且该实例只能由类自己来创建,对外提供接口获取唯一对象 饿汉式实现:在系统启动时创建唯一实例对象,缺点在于影响项目启动速度 public class HungrySingleton { private static final HungrySingleton singleton = new HungrySingleton(); private HungrySingleton() { } public static Hungry原创 2021-06-23 17:39:01 · 82 阅读 · 0 评论 -
设计模式概述
设计模式可以理解为面向对象设计原则下一组编码规范,是对类的封装、继承、多态以及关联关系和组合关系充分理解后精炼出的规范模型。 我们学习设计模式本质也是为了能用到自己的框架代码中,目前市面上主流的框架如 Spring、Mybaits 等等或多或少都有借鉴和使用设计模式,下面正式开始: 目前总结出的设计模式有23种,根据目的可以分为以下三大类: 创造型:描述如何创建对象,将对象的创建与使用分离 结构型:描述如何将类或对象按某种布局组成更大结构 行为型:描述类或对象之间如何协作实现单个对象无法实现的操作,以及怎原创 2021-06-23 16:30:13 · 58 阅读 · 0 评论