设计模式
Forest24
keep learning...
展开
-
Visitor 访问者模式
访问者模式:(内部固定不变时使用)在结构不变的情况下动态改变对于内部元素的动作public class Computer { ComputerPart cpu = new CPU(); ComputerPart memory = new Memory(); ComputerPart board = new Board(); public void ac...原创 2020-03-17 21:40:03 · 128 阅读 · 0 评论 -
Memento 备忘录模式
备忘录模式:记录状态,便于回滚原创 2020-03-16 21:33:05 · 106 阅读 · 0 评论 -
State 状态模式
状态模式:根据状态决定行为如果一个类的很多行为都是根据state去实现的,就可以把state抽象出来,在state里去实现方法。在真正的类里调用不同的state的子类的处理方法。public abstract class MMState { abstract void smile(); abstract void cry(); abstract void sa...原创 2020-03-16 09:30:08 · 197 阅读 · 0 评论 -
TemplateMethod 模板方法模式
模板方法模式:即钩子函数父类定义好方法但并没有实现,子类去做具体的实现。public class Test { public static void main(String[] args) { F f = new child(); f.m(); }}abstract class F { public void m() { ...原创 2020-03-15 21:33:16 · 167 阅读 · 0 评论 -
Prototype 原型模式
实现原型模式需要实现标记性接口Cloneable 。一般会重写clone()方法,如果只重写clone()方法而没有实现接口,调用是会抛异常。一般用于一个对象的属性已经确定,需要产生许多相同对象的时候。注意区分浅克隆和深克隆。/** * 浅克隆 */public class Test { public static void main(String[] arg...原创 2020-03-15 21:15:20 · 126 阅读 · 0 评论 -
Command 命令模式
命令模式:封装命令public abstract class Command { public abstract void doit(); public abstract void undo();}public class Content { String msg = "hello Command Patterns";}public class ...原创 2020-03-15 20:35:47 · 190 阅读 · 0 评论 -
Bridge 桥接模式
桥接模式:双维度扩展使用桥接模式:分离抽象与具体实现,让他们可以独自发展Gift -> WarmGift ColdGift WildGiftGiftImpl -> Flower Ring Carpublic abstract class Gift { GiftImpl impl;}public class GiftImpl {}public c...原创 2020-03-15 18:13:32 · 136 阅读 · 0 评论 -
Adapter 适配器模式
public static void main(String[] args) throws Exception{ FileInputStream fis = new FileInputStream("d:/test.text"); InputStreamReader isr = new InputStreamReader(fis); Buffe...原创 2020-03-15 15:09:38 · 138 阅读 · 0 评论 -
Builder 构建器模式
构建器模式:构建复杂对象public class Person { int id; String name; int age; double weight; int score; Location loc; private Person() {} public static class PersonBuilder {...原创 2020-03-15 14:52:27 · 108 阅读 · 0 评论 -
Flyweight 享元模式
享元模式:共享元数据,重复利用对象。java的String用的就是享元模式:java里所有的字符串都放在常量池里面,String的intern()指的是它内部指向常量池的那个引用。虽然new String("abc")的时候是在堆里new了一个String对象。但是如果这个对象在常量池里存在,则直接指向常量池里的拿来用,并不会在堆里再写个"abc"。 public stati...原创 2020-03-15 14:30:44 · 110 阅读 · 0 评论 -
Composite 组合模式
组合模式:树状结构专用模式abstract class Node{ public abstract void print();}/** * 叶子节点 */class LeafNode extends Node{ String content; public LeafNode(String content) { this.conte...原创 2020-03-15 13:55:20 · 133 阅读 · 0 评论 -
Observer 观察者模式
用观察者模式模拟小孩哭这个事件不同观察者做出的处理:public class Child { //默认小孩不哭 private boolean cry = false; List<Observer> observers = new ArrayList<>(); { observers.add(new Dad())...原创 2020-03-15 12:02:16 · 144 阅读 · 0 评论 -
Chain Of Responsibility 责任链模式
使用责任链模式模拟过滤器处理request,response请求:public class Test { public static void main(String[] args) { Request request = new Request(); request.str = "我是责任链模式,<script>,老铁,双击666";...原创 2020-03-15 10:49:19 · 119 阅读 · 0 评论 -
Facade门面模式 -- Mediator调停者模式
Facade门面模式 :将类与类之间的复杂的逻辑,封装到一个类中,对外提供接口。Mediator调停者模式:将类与类之间的复杂相互调用,由一个类来协调。解耦实际应用:消息中间件...原创 2020-03-14 22:58:28 · 196 阅读 · 0 评论 -
工厂方法和抽象工厂
工厂方法:产品维度好扩展抽象工厂:产品一族维度好扩展原创 2020-03-14 22:37:02 · 104 阅读 · 0 评论 -
策略模式
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。下面用比较器的实现来解释一下策略模式:涉及到三个角色: ● 环境(Client)角色:持有一个Strategy的引用。 ● 抽象策略(ComparatorStrategy)角色:这是一个抽象角色,通常由一个接...原创 2020-03-14 21:47:10 · 156 阅读 · 0 评论 -
动态代理之JDK与CGLib
JDK:被代理类需实现接口public interface Car { void run();}public class Audi implements Car { @Override public void run() { System.out.println("Audi run..."); }} public static ...原创 2019-06-16 16:34:22 · 91 阅读 · 0 评论 -
实现单例模式的两种方式
简单的懒汉饿汉就不谈了~方式一:使用synchronized的双重检查package com.example.demo;public class Singleton { //volatile关键字必须,否则指令重排时会出问题 private static volatile Singleton instance; private Singleton(){ ...原创 2019-04-20 22:16:43 · 442 阅读 · 0 评论 -
单例模式
1、饿汉式优点:类加载到内存后,就实例化一个单例,JVM保证线程安全。缺点:不论是否使用,类装载时就完成了实例化。(话说你要不用,你写它干嘛???所以此缺点微乎其微)最简单使用,完成一般业务足够~package com.example.demo.test;public class Singleton { //初始化静态的对象 private static final Si...原创 2019-05-13 17:32:54 · 156 阅读 · 1 评论