网站策划编辑如何做,互动营销的概念,策划网络营销方案,网站里添加图片超链接怎么做目录 1. 访问者模式2. 迭代器模式3. 观察者模式4. 模板模式5. 状态模式6. 备忘录模式7. 策略模式8. 解释器模式9. 责任链模式10. 命令模式11. 中介者模式 研究了一下#xff0c;我为了方便理解#xff0c;对它们进行了分类#xff1a; 针对请求者与执行者关系方面 1对多 - 责… 目录 1. 访问者模式2. 迭代器模式3. 观察者模式4. 模板模式5. 状态模式6. 备忘录模式7. 策略模式8. 解释器模式9. 责任链模式10. 命令模式11. 中介者模式 研究了一下我为了方便理解对它们进行了分类 针对请求者与执行者关系方面 1对多 - 责任链模式 - 沿着这条链传递该请求直到有一个对象处理它为止多对多、多对一 - 中介者模式 - 中介者使各对象不需要显式地相互引用一对一 - 命令模式 - 可用不同的请求对客户进行参数化 针对执行者 策略模式 - 使用不同的策略处理有不同的结果解释器模式 - 对请求语句进行解释状态模式 - 记录状态信息状态的变更引起了行为的变更备忘录模式 - 保存记录信息/恢复记录信息迭代器模式 - 顺序访问的模板模式 - 预先定义好行为操作的模板 针对执行者的追加操作 访问者模式 - 某元素追加额外的操作不影响原来的元素不改变原来的行为操作下也不改变元素结构情况下。观察者模式 - 观察执行者的执行动作的变化并发送到多个观察者中。
1. 访问者模式
表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
结构访问者、追加额外元素、原本元素
个人笔记 本来的执行操作是
visitor.handle(ObjectStruture);但为了不改变原来执行操作也不改变现有对象结构下进行追加操作且保留了原来的结构。
做了如下修改 元素类ObjectStruture 增加accept方法并追加elementList 访问者增加visit方法visit里添加 visitor.handle(ObjectStruture) 保留原来的handle方法 元素类抽象化 - Element 追加的元素类Element1、Element2
// 这是原本元素追加了其他额外元素通过add追加
public class ObjectStruture implements Element{private ListElement elementList new ArrayList();public void add(Element element){elementList.add(element);}public void accept(Visitor visitor) {for (Element element : elementList) {element.accept(visitor);}visitor.visit(this);}
}
// 访问者追加visit操作
public class Visitor {void visit(Element element){handle(element);}// 为了区分其他实现类不会追加例如 element1.accept(new Visitor()) 不会进行追加操作。void visit(Element1 element1){System.out.println(element1.getClass().getName());}void handle(Element element){System.out.println(element.getClass().getName());}
}
public static void main(String[] args) {ObjectStruture objectStruture new ObjectStruture();objectStruture.add(new Element1());objectStruture.add(new Element2());objectStruture.accept(new Visitor());
}
public interface Element {void accept(Visitor visitor);
}这是用于二次开发的用于对业务发生改变请求参数变化导致处理不适应原来的业务所以这时就需要使用访问者模式通过其他访问者修正数据以适应原来的业务操作。
2. 迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
典型例子JAVA 中的 iterator。
3. 观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
4. 模板模式
定义一个操作中的算法的骨架而将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
5. 状态模式
状态模式的定义当一个对象的内在状态改变时允许其改变行为这个对象看起来像是改变了其类。状态模式的核心是封装状态的变更引起了行为的变更。
参考文章https://blog.csdn.net/kris234seth/article/details/49684185
状态模式和状态是不同的概念这个状态模式行为会随着状态的改变而改变。
例如1、画图工具的字体颜色不同颜色写出来的字体颜色不同。2、连接请求不同连接状态得到不同的结果。
特点状态可变固定行为结果随状态改变而改变。
结构方面有三个部分抽象状态类State包含状态和行为、状态实现类、环境类Context包含行为
* 抽象状态类* void setContext(Context context)* void 行为()
* 状态实现类
* 环境类* void setState(State state){state.setContext(this);this.statestate;}* void 行为(){this.state.行为()}
//画图工具的字体颜色不同颜色写出来的字体颜色不同。
Context context new Context();
context.setColor(new RedColorState());
String result context.write(字体颜色);// 输出 [red]字体颜色
System.out.println(result);context.setColor(new GreenColorState());
String result2 context.write(字体颜色);// 输出[green]字体颜色
System.out.println(result2);6. 备忘录模式
备忘录模式的定义在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
参考文章https://blog.csdn.net/weixin_45433817/article/details/131501970
例如1、游览器的前进和后退操作。2、ps里的历史操作痕迹 特点备忘录负责保存记录负责人负责管理备忘录集合包含保存备忘录和得到哪个备忘录原发器负责创建备忘录原发器就是原来事件本身 结构方面有三个部分备忘录Menento、负责人Caretaker、原发者Originator
* 备忘录* void setContent(String content) * String getContent()
* 负责人* void add(Menento menento)* Menento get(int i)
* 原发者* Menento createMenento()* void recoveryFromMenento(Menento menento)Originator originator new Originator();//原发器能创建备忘录
Caretaker caretaker new Caretaker();//备忘录集合/负责人负责看管备忘录originator.setMessage(第一页); // 操作痕迹
caretaker.add(originator.createMenento()); // 保存痕迹到备忘录
originator.setMessage(第二页); // 操作痕迹
caretaker.add(originator.createMenento()); // 保存痕迹到备忘录System.out.println(获取前一页记录caretaker.get(-1)); // 获取前一个备忘录的痕迹 输出获取前一页记录Menento{source第一页}
//恢复备忘录
originator.recoveryFromMenento(caretaker.get(-1)); // 恢复前一个备忘录痕迹
System.out.println(恢复后originator.getMessage());// 输出恢复后第一页7. 策略模式
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
个人笔记随着使用策略不同返回不同结果
8. 解释器模式
给定一个语言定义它的文法的一种表示并定义一个解释器这个解释器使用该表示来解释语言中的句子。
9. 责任链模式
使多个对象都有机会处理请求从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链并沿着这条链传递该请求直到有一个对象处理它为止。
个人笔记 与命令模式不同的是 责任链模式是没有限制有多少实现。 命令模式是一个请求只有一个实现。
public class FilterChain {ListFilter filters new ArrayListFilter();public void addFilter(Filter filter) {filters.add(filter);}public void doChain(String msg){//沿着这条链传递该请求直到有一个对象处理它为止for(Filter filter : filters){boolean b filter.doFilter(msg);// 直到有一个对象处理它为止if(b){return;}}}
}10. 命令模式
将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志以及支持可撤消的操作。
个人笔记 不同的请求执行不同的程序
与策略模式不同的是 命令模式是不同的请求决定不同的结果 策略模式是不同的策略决定不同的结果
CommandProcessor processor new CommandProcessor();
processor.add(ping,new CommandPing());
String result processor.execute(ping 192.168.3.1);
System.out.println(result);11. 中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用从而使其耦合松散而且可以独立地改变它们之间的交互。
个人笔记 与责任链模式不同的是 责任链模式是有多个执行对象。 中介者模式是只有一个执行对象不需要关注请求对象与执行对象是否一致问题。
例子聊天室