![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
不生气的打工人
这个作者很懒,什么都没留下…
展开
-
设计模式总结
设计模式总结设计模式分类创建型Abstract FactoryBuilderFactory MethodProtoTypeSingleton结构型AdapterBridgeCompositeDecoratorFacadeFlyWeightProxy行为型Chain of ResponsibilityCommandInterpreterIteratorMediatorMementoObserverStateStrategyTemplate Meth原创 2021-07-22 22:37:51 · 57 阅读 · 0 评论 -
设计模式(二一)解释器模式(Intepreter)
解释器模式(Intepreter)解释解释脚本语言举例:正则表达式解析器类似于编译器,解释一门语言开发中并不能用上且写起来很麻烦。原创 2021-07-22 22:10:08 · 56 阅读 · 0 评论 -
设计模式(二十)状态模式(State)
状态模式(State)解释根据状态决定行为如果有多个state,且有可能扩展state,则干脆将state抽象出来,不同的state实现各自的逻辑类图代码public class MM { String name; MMState state = new MMHappyState(); public void smile() { state.smile(); } public void cry() { state.c原创 2021-07-22 21:49:20 · 72 阅读 · 0 评论 -
设计模式(十九)模板方法模式(Template Method)
模板方法模式(Template Method)解释钩子函数 回调函数都算作是模板方法重写一个方法,系统自动帮我们调用的都可以称为模板方法模式类图代码public class Main { public static void main(String[] args) { F f = new C1(); f.m(); }}abstract class F { public void m() { op1();原创 2021-07-22 21:17:46 · 69 阅读 · 0 评论 -
设计模式(十八)备忘录模式(Memento)
备忘录模式(Memento)解释记录状态,快照存盘类似于照片的感觉类图知识点序列化/持久化标记型接口 Serializable不实现接口,直接做序列化会报错如果类中有不想做序列化的对象,添加关键字transient存盘的时候,可以使用ObjectOutputStream读盘的时候,可以使用ObjectInputStreampublic void save(){ File f = new File("/opt/data/test.data"); ObjectOutputStre原创 2021-07-21 22:54:42 · 106 阅读 · 0 评论 -
设计模式(十七)原型模式(Prototype)
原型模式(Prototype)解释Object.clone()就是原型模式的一个经典应用类图代码public class Test { public static void main(String[] args) throws Exception { Person p1 = new Person(); Person p2 = (Person)p1.clone(); System.out.println(p2.age + " " + p2.s原创 2021-07-21 22:53:28 · 75 阅读 · 0 评论 -
设计模式(十六)封装命令模式(Command)
封装命令模式(Command)解释又叫:Action/Transaction常用作undo时使用举例说明:编辑器中的ctrl+z就是一个undo类图代码public abstract class Command { public abstract void doit(); //exec run public abstract void undo();}public class InsertCommand extends Command { Content原创 2021-07-21 22:52:33 · 128 阅读 · 0 评论 -
设计模式(十五)桥接模式
桥接模式解析分离抽象和具体使用聚合方式连接抽象和具体类图代码/*** 使用桥接模式:* 分离抽象与具体实现,让他们可以独自发展* Gift -> WarmGift ColdGift WildGift* GiftImpl -> Flower Ring Car*/抽象相关体系 ----> Giftpublic abstract class Gift { GiftImpl impl;}public class WarmGift extends Gift原创 2021-07-20 23:23:03 · 65 阅读 · 0 评论 -
设计模式(十四)转换器&包装器模式
转换器&包装器模式解释添加转换,使得一个类可以访问之前不能访问的类举例说明电源转接头java.ioJdbc-ocbc bridge 即Java连接sql server,将java连接的jdbc转换为odbc连接sql serverAsm transformer…类图代码public class Main { public static void main(String[] args) throws Exception { FileInputStre原创 2021-07-20 23:22:10 · 178 阅读 · 0 评论 -
设计模式(十三)构建者模式
构建者模式解释分离复杂对象的构建和表示类图代码public class Person { int id; String name; int age; double weight; int score; Location loc; private Person() { } public static class PersonBuilder { Person p = new Person();原创 2021-07-20 23:20:31 · 60 阅读 · 0 评论 -
设计模式(十二)访问者模式
访问者模式解释在结构不变的情况下动态改变对于内部元素的动作举例组装电脑,不同的顾客打不同的折扣可以使用visitor模式,不同的visitor实现各自的对应折扣问题public class Computer { ComputerPart cpu = new CPU(); ComputerPart memory = new Memory(); ComputerPart board = new Board(); public void acccept(Visitor原创 2021-07-19 22:15:37 · 94 阅读 · 1 评论 -
设计模式(十一)迭代器模式
Iterator模式解释多态的一个应用,各自的实现类实现自己的遍历方法,实现自己的遍历逻辑。类图举例学习建立一个容器,可以存放数据,多种数据结构。遍历时怎么遍历?各自的数据结构实现自己的遍历方法。代码顶级接口public interface Collection_<E> { void add(E o); int size(); Iterator_ iterator();}ArrayList实现class ArrayList_<E>原创 2021-07-15 22:49:28 · 93 阅读 · 1 评论 -
设计模式(十)代理模式
代理模式Proxy动态代理静态代理解释类似于一个代理商的概念,代理主要的作用就是在不妨碍被代理方法执行的同时,添加一些逻辑。比如:加一个日志的打印记录执行时间…类图代码静态代理public class Tank implements Movable { /** * 模拟坦克移动了一段儿时间 */ @Override public void move() { System.out.println("Tank原创 2021-07-12 23:00:09 · 70 阅读 · 0 评论 -
设计模式(九)享元模式
享元模式FlyWeight解释重复利用对象共享元数据举例Java中的String的常量池就是使用的享元模式public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; String s3 = new String("abc"); String s4 = new String("abc"); System.out.println(s1 == s2); //true Syste原创 2021-07-12 21:28:18 · 56 阅读 · 0 评论 -
设计模式(八)组合模式
组合模式Composite模式树状结构专用模式解释根结点存在子节点,子节点依然可以有子节点代码维度abstract class Node { abstract public void p();}class LeafNode extends Node { String content; public LeafNode(String content) {this.content = content;} @Override public void p(原创 2021-07-12 21:27:03 · 51 阅读 · 0 评论 -
设计模式(七)观察者模式
观察者模式解释多个观察者,等待被观察者触发某个状态,触发则通知观察者,进行处理代码维度举例小朋友哭了要喂吃的…V1 while循环观察等待V2 抽象小朋友对象,根据表示符号判断V3 抽象观察者,根据情况调用观察者class Child { private boolean cry = false; private Dad d = new Dad(); public boolean isCry() { return cry; }原创 2021-07-11 19:39:39 · 133 阅读 · 1 评论 -
设计模式(六)责任链模式
责任链模式解释将多个逻辑串成一条链路,按照链路依次执行代码维度举例通过处理论坛发布消息来举例发布消息需要通过多次检查安全性检查敏感词检查…功能实现通过过滤器来实现new XXXFilter().doFilter(msg);new XXXFilter().doFilter(msg);将多个过滤器封装到list中List<Filter> filters = new ArrayList();filters.add(new XXXFilter());fil原创 2021-07-11 15:08:55 · 136 阅读 · 0 评论 -
设计模式(五)装饰器模式
装饰器模式解释为某些东西添加一个装饰例如:坦克大战中,为坦克添加外壳、血条等等…代码维度通过继承可以实现吗?不灵活,耦合度过高,如果同时想要多个装饰呢?通过Decorator模式封装GameObject对象,对GameObject进行装饰逻辑上讲如需要给bullet添加Rect,new一个bullet,传递给RectDecorator即可同样道理,也可以new一个RectDecorator传递给TailDecorator,可以实现既有方块儿又有尾巴...原创 2021-07-10 16:10:01 · 65 阅读 · 0 评论 -
设计模式(四)门面&调停者模式
门面模式&调停者模式门面模式解释封装一堆复杂的逻辑,对外提供统一的类进行操作这些复杂逻辑图解调停者模式解释可以理解为内部的一个门面模式?主要解决内部多系统调用间的问题,提供一个统一的调停者,所有系统全部与之沟通。图解应用调停者模式有一个著名的应用:消息中间件...原创 2021-07-10 16:09:17 · 93 阅读 · 0 评论 -
设计模式(三)工厂模式
设计模式(三 )工厂模式需求与思考任意定制交通工具继承Moveable任意定制生产过程Moveable XXXFactory.create()任意定制产品一族一个工厂生产一族的产品简单工厂(SimpleFactory)原理定义一个工厂方法,统一创建对象,在对象的创建方法中添加各种逻辑代码实现/** * 简单工厂的可扩展性不好 */public class SimpleVehicleFactory { public Car createCar() {原创 2021-05-31 23:18:11 · 50 阅读 · 0 评论 -
设计模式(二)策略模式
设计模式(二) 策略模式策略模式(strategy)原理封装的是一个接口(策略)的实现常见应用Compartor接口就是我们常用的策略代码示例client代码public class Sorter<T> { public void sort(T[] arr, Comparator<T> comparator) { for(int i=0; i<arr.length - 1; i++) { int minPo原创 2021-05-30 17:25:04 · 93 阅读 · 0 评论 -
设计模式(一) 单例模式
设计模式(一) 单例单例模式(Singleton)原理在代码层面保证 内存中只有一个实例常见应用各种Manager、Factory代码示例实现一public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01() {}; public static Mgr01 getInstance() { return INSTANCE; }原创 2021-05-30 10:45:17 · 60 阅读 · 0 评论