设计模式
befory
完成基本资料
展开
-
代理模式-JDK动态代理
特点动态代理是AOP的核心技术,JDK的动态代理主要基于java.lang.reflect.InvocationHandler与java.lang.reflect.Proxy类,通过反射技术创建代理对象。实现创建一个@Before注解,在Sales接口上加上注解public interface Sales { @Before void sale(Goods goods);}创建一个InvocationHandler,实现invoke方法@Slf4jpublic class原创 2021-03-26 18:11:58 · 117 阅读 · 0 评论 -
代理模式-静态代理
特点代理模式表示代理一个类的功能,主要关注点在于控制。属于结构性模式。一般分为静态代理和动态代理,其中静态代理在结构上与适配器模式、包装器模式非常相似。动态代理一般会被分为JDK动态代理和Cglib动态代理,前者只能代理接口,后者可代理具体类。实现示例静态代理需要代理对象与被代理对象都实现同一个接口,然后在代理对象内实现控制逻辑。模拟商品代理的过程,当商品生产后,工厂售卖商品,代理商代理工厂也售卖商品,代理商售卖商品前需要对商品加价处理。商品类public class Goods {原创 2021-03-26 18:05:46 · 116 阅读 · 0 评论 -
设计模式-享元模式
特点享元模式主要用于复用对象,减少对象数量以节省系统资源、提高性能。属于结构型模式。常见于线程池等技术实现。代码享元模式共享内部状态,即相同的那部分。外部状态不能共享,即不同的地方,以围棋的棋子为例:围棋棋子在初始状态下分为黑白2色,当棋子移动到棋盘时,会产生一个坐标。棋子工厂类public class ChessPiecesFactory { private static final Map<Color,WeiQiChessPieces> CHESS_PIECES_MAP原创 2021-03-18 19:56:46 · 69 阅读 · 0 评论 -
设计模式-外观模式
外观模式也叫门面模式,它只涉及单一的类,即对外提供一个接口类,适用方无须知道具体实现,通常封装的工具类、mvc模式的controller等都是门面模式的应用。该模式符合迪米特法则。属于结构型模式。...原创 2021-03-17 14:32:54 · 79 阅读 · 0 评论 -
设计模式-装饰器模式
特点装饰者模式也叫包装器模式,它允许向现有的对象新增功能,但是不改变现有对象的结构,主要作用于该对象的增强功能,属于结构型模式。代码实现装饰器中抽象类public abstract class Animal { public abstract void eat();}public class Monkey extends Animal{ @Override public void eat(){ log.info("我会吃香蕉"); }}原创 2021-03-17 10:41:54 · 67 阅读 · 0 评论 -
设计模式-组合模式
特点组合模式主要用于层次结构比较明显的对象创建,如树结构、树形菜单、文件管理等。属于结构型模式。代码针对按钮实现父级按钮和子集按钮展示。按钮类public class Button { private int id; private String name; private List<Button> subButtons; private int level; public Button(int id, String name,int原创 2021-03-16 14:33:57 · 68 阅读 · 0 评论 -
设计模式-过滤器模式
特点过滤器模式也叫标准模式,允许开发人员根据标准过滤一组对象,通过逻辑运算解耦应用程序。程序代码pojo 对象Person类@Slf4j@Data@Accessors(chain = true)public class Person { private int age; private boolean married; private int sex;}标准接口类public interface Criterion { List<Per原创 2021-03-15 17:44:04 · 134 阅读 · 2 评论 -
设计模式-桥接模式
特点桥接模式属于结构型,它的主要特点在于,多维度接口都能独立变化,抽象和实现分离、然后聚合关联关系。代码示例先后定义一个画笔和形状,画笔有红色和绿色、形状有方形和圆形。当需要画图形时,就需要将画笔和形状链接。画笔接口public interface Brush { String color();}形状接口public interface Shape { String shape();}画笔实现类@Slf4jpublic class GreenBrush原创 2021-03-12 17:18:44 · 100 阅读 · 0 评论 -
设计模式-适配器模式
特点适配器模式主要将已有的接口转化适配成客户需要使用的接口,针对代码后期补救措施,一般在代码设计之初不会采用,主要应用场景是兼容之前的接口。它属于结构型模式,主要实现方式为类适配(继承)和对象适配(组合)的方式。本文基于经典的充电器问题进行说明。核心代码提供电压接口(插座)@Slf4jpublic class Socket{ private int voltage = 220; // 提供一个电压 public int support220(){ lo原创 2021-03-12 14:37:55 · 64 阅读 · 0 评论 -
设计模式-原型模式
特点原型模式属于创建型。用于创建拷贝复杂对象,避免重复创建对象发生的资源损耗,在一定程度上提升了性能。原型模式主要被分为浅拷贝和深拷贝2种模式,它主要实现了接口Cloneable,重写Object类中的clone方法。浅拷贝浅拷贝只能对基本类型(long,double,float,int,short,byte,boolean,char)和String类型有效果,对复杂的类型只能不能有效果。public class Car implements Cloneable{ private Stri原创 2021-03-11 15:23:29 · 141 阅读 · 3 评论 -
建造者模式
特点建造者模式也叫创建者模式,属于创建型设计模式。旨在更为灵活的创建对象。该模式有一个Builder类,主要提供对象的构建过程。与工厂模式最大的区别在于工厂模式是封装了对象的创建过程,提供最终的对象,而建造者模式则更为灵活的将建造过程提供给使用者,让其自由设定对象创建过程和属性。代码public class Phone { private String cpu; private String battery; private String model; private原创 2021-03-10 10:22:47 · 80 阅读 · 0 评论 -
设计模式-工厂设计模式
特点工厂模式属于创建型,是生成创建复杂对象的一种设计模式。通常情况下,工厂模式被分为工厂模式和抽象工厂模式。其中工厂模式也被称为简单工厂模式,它的每一个工厂都是一个单例。抽象工厂模式即为将每个工厂的一些步骤抽象化,达到代码复用的目的。工厂模式假使存在一个制造手机的工厂,工厂存在2条生产线,一条制造MiPhone,1条制造HuaPhone;手机存在拨打电话和发送短信的功能。手机功能接口类public interface Phone { void call(); void se原创 2021-03-09 13:34:18 · 912 阅读 · 0 评论 -
备忘录设计模式
特点备忘录模式通常来讲有3个类,一个需要备忘存档的Memo类,一个发起者Initiator,还有一个管理Meno的类MenoManager。备忘录模式运用也比较广泛,如:撤销、回滚、悔棋、游戏存档等场景。备忘录模式解耦了Initiator和MomeManager、能查看到一定时期的历史数据、能防止误操作等优点,但同时也最大的缺点会产生大量的历史数据、会比较占用空间。本文将实现一个比较容易的存档和回滚到某个时间段的功能。类图如下:说明 : Memo 为一个pojo,拥有content和time字段;原创 2021-03-05 18:43:59 · 121 阅读 · 0 评论 -
设计模式-单例
特点系统内有且只有一个实例对象;单例类的构造方法为私有的,自己持有自己的一个实例对象;开放获取实例对象的方法;分类单例模式主要可分为饿汉式、饱汉式、枚举式、内部类、容器式;测试代码均采用多线程测试方式。饿汉式在类加载时,创建一个实例,当外部获取时,直接返回创建的实例。这种方式占用了一定的内存空间、节约了在使用时创建对象的时间和资源消耗。也不用担心线程安全的问题。public class HungrySingleton { private HungrySingleton(){}原创 2021-03-04 17:59:15 · 196 阅读 · 4 评论