zoukankan      html  css  js  c++  java
  • 策略模式小记【原创】

    最近在学设计模式,工作之余也看了一些书。怕以后忘了,对于每个设计模式,及时做个积累!     

    刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个只是干活的人,从锦囊中取出妙计、执行的人。

    如上图,诸葛亮给了赵云三个妙计(BackDoor等),分别实现IStrategy妙计接口,并实现接口里的operate()方法,即个妙计的具体内容。妙计得放在锦囊里,Context就是锦囊。它里面定义了一个妙计IStrategy类型变量,并有一个构造函数。客户端(调用者、赵云)向Context传入具体的妙计子类,并通过调用Context的operate方法,调用了锦囊类IStrategy的operate方法。而此时,由于传入参数是子类,所以实际上父类的operate方法已经被子类的具体operator方法所覆盖,体现出多态。

         但是学完此模式,觉得有些时候此模式不宜单独使用。因为在这个模式里,客户端(赵云)需要知道要用哪个具体的妙计子类,需要将该子类传入Context,才能调用它的operate方法。有些时候甚至要在客户端判断该使用哪个子类。此时如果直接在客户端加入判断不好。应该与简单工厂相结合(要判断的时候),将判断传入具体子类的语句放在Context的构造函数中。

         一句话概括:聚合关系,初始化传入对象,调用其方法!

    注:本系列大部分例子来源自秦小波的《设计模式之禅》

  • 相关阅读:
    JWT(JSON WEB TOKEN) / oauth2 / SSL
    Guice 学习
    九 fork/join CompletableFuture
    二 lambda表达式
    IDEA 热部署 + 下载jar包放到maven中
    微服务学习一 微服务session 管理
    一 Optional
    八 线程池(待续)
    七 内置锁 wait notify notifyall; 显示锁 ReentrantLock
    六 多线程问题
  • 原文地址:https://www.cnblogs.com/winkey4986/p/2413238.html
Copyright © 2011-2022 走看看