设计模式
学习Java常见的设计模式
飞翔荷兰号
这个作者很懒,什么都没留下…
展开
-
设计模式七大原则
一、单一职责原则1. 传统案列Vehicle类不应该负责各种交通工具的运行,否则就会出现程序异常,违反了类的单一职责原则;package com.day.dreamer.seven.singleresponsibility;public class SingleModelFirst { public static void main(String[] args) { Vehicle bicycle = new Vehicle(); bicycle.run原创 2020-08-20 23:31:15 · 216 阅读 · 0 评论 -
单例模式-Singleton Pattern
单例模式:在软件系统中,某个类的对象只能存在一个频繁创建并且销毁的对象耗时过多或者耗费资源太多,并且需要不断创建的对象(数据源connection)1 饿汉式类加载时候就会加载该对象,保证线程绝对安全假如类被触发加载了,但实例并没有使用到,因此可能造成内存浪费1.1 静态成员变量class Singleton { /** * 1. 私有构造,外部不能直接new * 2. 静态成员变量,类加载时就可初始化 * 3. 对外提供公有静态方法 *原创 2021-10-24 10:47:08 · 126 阅读 · 0 评论 -
工厂模式-Factory Pattern
1. 简单工厂(参数决定类型)工厂方法: 根据参数决定创建的具体的对象缺点:违反ocp原则, 即Open Closed Principle, 也就是对修改关闭,对扩展开放假如增加新的工程生产对象,则需要修改原来代码public class Test01 { public static void main(String[] args) { Factory factory = new Factory(); Vehicle car = factory.getVe原创 2021-07-05 15:59:36 · 78 阅读 · 0 评论 -
适配器模式-Adapter Pattern
1. 类适配器客户端接口不满足要求自定义一个适配器接口以及具体的适配器类,转换原来客户端接口消费客户端时,客户端的实现不可见,具体是有适配器类进行工作/** 1. 房屋买卖,买方不和卖房直接沟通,所有事情都是中介和 卖方沟通,然后将信息回馈给买方 2. 买方只和中介打交道 */public class Test01 { public static void main(String[] args) { // 使用系统提供的适配器,也可以自定义适配原创 2021-07-05 17:01:38 · 92 阅读 · 0 评论 -
组合模式-Composite Pattern
如树形菜单,文件、文件夹的管理package com.nike.erick.combine;import lombok.ToString;import java.util.ArrayList;import java.util.List;public class Test { public static void main(String[] args) { Employee ceo = new Employee("lucy", "A", 10000); .原创 2022-03-13 17:22:37 · 225 阅读 · 0 评论 -
装饰器模式-Decorator Pattern
允许向一个现有的对象添加新的功能,同时又不改变其结构创建一个装饰类,包装原有的类,并在保持类方法签名完整性的前提下,提供额外功能动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能继承加组合- 静态代理和装饰者模式的实现过程本质上没什么区别- 装饰者模式只是为了增强原对象的方法;而代理模式主要是为了控制对象的访问package com.nike.erick.decorator;public.原创 2022-03-13 17:13:14 · 263 阅读 · 0 评论 -
外观模式-Facade Pattern
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口package com.nike.erick.facade;public class Test { public static void main(String[] args) { Management management = new Management(new FirstApp(), new SecondApp(), new ThirdApp().原创 2022-03-13 16:42:11 · 205 阅读 · 0 评论 -
享元模式-Flyweight Pattern
1. 理念用于减少创建对象的数量,以减少内存占用和提高性能尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象2. Coding频繁需要创建的对象,在池子中通过map来保存数据库连接池,线程池,都是享元模式的经典利用package com.design.pattern.day02;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;public class Demo04 { publ原创 2021-10-26 13:40:23 · 89 阅读 · 0 评论 -
模版模式-Template Pattern
父类定义方法的前置和后置处理,子类只需要去实现具体的方法逻辑即可父类为抽象类或普通类,模版方法用final修饰,不用子类去覆盖应用场景:不同的业务流程中,只有其中一个步骤不同,其他都相同的场景1. Demopackage com.design.pattern.day01;public class Demo05 { public static void main(String[] args) { CoffeeMaker americanoCoffeeMaker = n原创 2022-03-13 12:38:05 · 65 阅读 · 0 评论 -
中介者模式-Mediator Pattern
提供一个中介类,中介类和具体的子系统类进行交互,避免了子系统之间的直接交互比如MVC中的controller层,可以来调用不同的service来完成业务package com.nike.erick.meditor;import java.util.Date;import java.util.HashMap;import java.util.Map;public class Test { public static void main(String[] args) { .原创 2022-03-13 16:03:52 · 713 阅读 · 0 评论 -
备忘录模式-Memento Pattern
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。存档游戏package com.nike.erick.memento;import lombok.AllArgsConstructor;import lombok.Getter;import lombok.Setter;import java.util.ArrayList;import java.util.List;public class Test { p.原创 2022-03-13 16:06:46 · 207 阅读 · 0 评论 -
策略模式-Strategy Pattern
将接口作为参数,调用的时候实现接口就可1. Runnable接口和Thread 类Runnable接口@FunctionalInterfacepublic interface Runnable { public abstract void run();}Thread 类public class Thread implements Runnable { private Runnable target; public Thread(Runnable ta.原创 2022-03-13 16:07:51 · 86 阅读 · 0 评论 -
命令模式-Command Pattern
1. 命令模式- 将动作的请求者和动作的执行者分开,达到解耦的目的- 命令的发布者,并不清楚具体事谁来执行- 具体的请求封装成一个对象, 支持撤销- 角色: 命令发布者(Invoker) 命令具体执行者(Reveiver) 命令(Command) 链接二发布者和执行者...原创 2022-03-13 11:24:01 · 103 阅读 · 0 评论 -
观察者模式-Observer Pattern
一、迭代器二、观察者当对象间存在一对多关系时,则使用观察者模式当一个对象被修改时,则会自动通知依赖它的对象三、中介者提供一个中介类,中介类和具体的子系统类进行交互,避免了子系统之间的直接交互比如MVC中的controller层,可以来调用不同的service来完成业务package com.nike.erick.meditor;import java.util.Date;import java.util.HashMap;import java.util.Map;public原创 2022-03-12 01:48:04 · 251 阅读 · 0 评论 -
职责链模式-Chain of Responsibility Pattern
一、状态模式二、策略模式1. JDBC案列查询接口接口负责数据的转换,具体怎么转换,需要开发者自己实现;package com.day.dreamer.thread.day01;import java.sql.ResultSet;/** * @author EShu */public interface IHandleResult<T> { /** * 1. 使用范形,保证返回的值为任意类型 * 具体是什么样子,自己去手动实现原创 2022-03-11 10:05:50 · 5445 阅读 · 0 评论 -
空对象模式-Null Object Pattern
一个空对象取代 NULL 对象实例的检查Null 对象不是检查空值,而是反应一个不做任何动作的关系这样的 Null 对象也可以在数据不可用的时候提供默认的行为原创 2022-03-13 12:48:55 · 147 阅读 · 0 评论