
设计模式
zzj0807
这个作者很懒,什么都没留下…
展开
-
设计模式 - 概览与总结 & 面向对象6大原则
1. 设计模式列表1.1 创建型模式1.1.1 Abstract Factory1.1.2 Builder1.1.3 Factory Method1.1.4 Prototype1.1.5 Singleton1.2 结构型模式1.2.1 Adapter1.2.2 Bridge1.2.3 Composite1.2.4 Decorator1.2.5 Facade1.2.6 Flyweight1.2.7 Proxy1.3 行为型模式1.3.1 Chain of Responsibil原创 2020-11-02 14:20:32 · 77 阅读 · 0 评论 -
设计模式 - 状态模式 ( State ) & 有限状态机 ( FSM Finite State Machine)
状态模式 和 有限状态机 并不完全是一回事状态模式是一种设计模式, 根据状态决定行为, 更多关注的是在某状态下, 行为Action是什么而有限状态机主要关注于: 状态之间是如何迁移和变化的状态模式根据状态决定行为老规矩, 先来举一个原始的例子public class MM { String name; MMState state; private enum MMState {HAPPY, SAD} public void smile() { .原创 2020-11-02 13:54:08 · 258 阅读 · 0 评论 -
设计模式 - 备忘录模式 ( Memento )
记录对象的某个瞬间, 类似照片记录快照 ( 瞬时状态 )存盘一般是用序列化存盘的时候, 把大对象序列化, 存在硬盘或内存里load的时候, 再把它反序列化回来就行原创 2020-11-02 11:39:37 · 139 阅读 · 0 评论 -
设计模式 - 原型模式 ( Prototype ) 平时用的不多
java中的原型模式自带 -> Object.clone()实现原型模式需要实现标记型接口Cloneable一般会重写clone()方法一般用于一个对象的属性已经确定, 需要产生很多相同对象的时候或者一个对象的属性过多, 可以省去大量setXXX的代码需要区分深克隆与浅克隆对于属性过多的对象, 也可以考虑用builder模式, 原型模式用的不多浅克隆只在Person类中加一个clone方法, 不在Location中加clone方法改了p1对象的某个属性, 发现p2的这个属性.原创 2020-11-02 11:04:31 · 193 阅读 · 0 评论 -
设计模式 - 命令模式 ( Command ) 结合cor实现undo
用于封装命令, 并实现回滚别名: Action / Transaction与Composite模式配合使用, 实现多个命令组成宏命令与责任链模式配合使用, 实现多次undo对于每一步的执行, 都要有办法回滚rollback / undopublic abstract class Command { public abstract void doit(); // exec run public abstract void undo(); // 回滚}public class原创 2020-11-02 10:06:38 · 219 阅读 · 0 评论 -
设计模式 - 桥接模式 ( Bridge ) 平时用的少
分离抽象与具体用聚合方式 ( 桥 ) 连接抽象与具体主要目的是抽象的也能发展, 不同的类去继承抽象类具体的也能发展, 不同的类去继承具体类举个GG追MM的例子原始代码public abstract class Gift {}public class Book extends Gift {}public class Flower extends Gift {}public class MM { String name;}public class GG { pub.原创 2020-11-02 09:40:45 · 103 阅读 · 0 评论 -
设计模式 - 适配器模式 ( Adapter / Wrapper )
包装器 / 接口转换器常见的例子电压转接头java.iojdbc-odbc bridge ( 不是桥接模式)ASM transformerJava只能调用JDBC接口, 而SQLServer提供的是odbc, 这中间有一层转换,就是适配器模式: JDBC-ODBC-BridgeBufferedReader不能直接调用InputStream, 所以中间搞了个Adapter(reader)用于适配java.io的这种模式也能称作装饰器模式, 设计模式就是这样, 有时候是混杂的误区原创 2020-11-02 09:03:27 · 171 阅读 · 0 评论 -
设计模式 - 构建器模式 ( Builder )
定义分离复杂对象的构建和表示同样的构建过程可以创建不同的表示无需记忆, 自然使用举个地形构建器的例子://地形构建器public interface TerrainBuilder { TerrainBuilder buildWall(); // build墙 TerrainBuilder buildFort(); // build暗堡 TerrainBuilder buildMine(); // build地雷 Terrain build();}3个b原创 2020-11-02 08:40:43 · 135 阅读 · 0 评论 -
设计模式 - 深度分析代理模式 ( Proxy 静态代理 or 动态代理 )
定义为其他对象提供一种代理, 以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介作用数据结构型设计模式适用场景保护目标对象增强目标对象静态代理显式声明被代理对象JDK动态代理的实现原理拿到被代理类的引用, 并且获取他的所有的接口(反射获取)JDK Proxy类重新生成一个新的类, 实现了被代理类所有接口的方法动态生成Java代码, 把增强逻辑加入到新生成代码中编译生成新的Java代码的class文件加载并重新运行新的class, 得到类就是全新类CGLib原创 2020-10-31 13:07:47 · 223 阅读 · 0 评论 -
设计模式 - 享元模式 ( FlyWeight )
1111原创 2020-10-30 12:04:19 · 83 阅读 · 0 评论 -
设计模式 - 组合模式 ( Composite )
树状结构专用模式比较简单, 两个典型的例子菜单栏列表里, 可以add子菜单栏和具体的菜单选项文件系统里, 一个目录下面, 可以add子目录或具体的文件和享元模式(FlyWeight 共享元数据)搭配可以参考举个目录和文件的例子:文件系统里有directory和file两种类型directory就是图中的Branch, file就是图中的Leaf, 他们都是Node类型的一个direcotry可以add(Node n)到List lists里, 也就是可以add另一个director原创 2020-10-30 12:03:51 · 112 阅读 · 0 评论 -
设计模式 - 责任链模式 ( Chain of Responsibility ) 较难
V0版本: 最直观的, 定义MsgHandler直接处理只是把冗余代码封装到MsgHandler而已, 非常简单想要扩展性好一些, 需要定义不同的Filter, 下面是第一个版本的解决方案.V1版本: 最简单的责任链定义一个Filter接口, 里面有一个doFilter(msg m)核心方法然后再定义两个负责具体事务的类: 1. 替换标签符号的HTMLFilter 2. 替换敏感词SensitiveFilter测试代码public class Main { public s原创 2020-10-25 22:16:56 · 94 阅读 · 0 评论 -
设计模式 - 装饰器模式/ 装饰者模式 ( Decorator )
定义有重构项目需求的人群一定要掌握装饰者模式是指在不改变原有对象的基础上, 将功能附加到对象上, 提供了比继承更有弹性的替代方案扩展原有对象的功能属于结构型模式.经典案例JDK的IO: new BufferedReader(new FileReader(new FileInputStreamReader())).生活中的装饰者模式适用场景用于扩展一个类的功能或给一个类添加附加指责动态的给一个对象添加功能, 这些功能可以再动态的撤销原始的设计方式基类: 煎饼装饰1: 加原创 2020-10-25 18:02:41 · 141 阅读 · 0 评论 -
设计模式 - 工厂系列 ( 简单工厂Simple Factory, 工厂方法Factory Method, 抽象工厂Abstract Factory )
原始社会 没有工厂, 自给自足简单工厂 农耕社会小作坊, 一家人专门做某样东西静态工厂工厂方法 工厂流水线生产, 有了一定的标准和规范, 但是只能生产一种产品抽象工厂 现代产业链代工厂, 比如富士康, 零配件的生产工厂, 可以生产屏幕, 不仅可以组装小米的手机, 也能组装苹果的手机, 多元化, 复杂化Spring IOC定义任何可以产生对象的方法或类, 都可以称之为工厂单例模式也是一种FactoryFactory类一般都是单例模式为什么有了new之后, 还要有工厂?灵活控制.原创 2020-10-25 14:35:28 · 121 阅读 · 0 评论 -
设计模式 - 概览
设计思路举例具体模式Spring IOC工厂, 单例, 装饰器Spring AOP代理, 观察者Spring MVC委派, 适配器Spring JDBC模板方法原创 2020-10-25 12:30:08 · 100 阅读 · 0 评论