Java修炼之道--设计模式

原做地址:https://github.com/frank-lam/2019_campus_applyhtml

1、概述

一、设计模式是人们在面对同类型软件工程设计问题所总结出的一些有用经验。模式不是代码,而是某类问题的通用设计解决方案java

二、4人组Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides总结写了《设计模式》git

三、设计模式的优势和用途github

四、学习设计模式最好的方式:在你的设计和以往的工程里寻找何处可使用它们算法

五、设计模式的本质目的是使软件工程在维护性、扩展性、变化性、复杂度方面成O(N)设计模式

六、OO(Object Oriented)是原则,设计模式是具体方法、工具api

设计模式怎么分类,每一类都有哪些?【蚂蚁金服内推】

设计模式怎么用到项目中?【阿里面经】

2、设计模式

单例模式

工厂模式

观察者模式

适配器模式(Adapter)

2018/7/15安全

意图

把一个类接口转换成另外一个用户须要的接口。适配器模式让那些接口不兼容的类能够一块儿工做oracle

img

类型

适配器模式的别名为包装器(Wrapper)模式,它既能够做为类结构型模式,也能够做为对象结构型模式。在适配器模式定义中所说起的接口是指广义的接口,它能够表示一个方法或者方法的集合。app

  • 对象适配器:(传入对象)组合方式,可是更灵活推荐使用这种方式
  • 类适配器:(多重继承)继承方式,效率更高

类图

img

实现

鸭子(Duck)和火鸡(Turkey)拥有不一样的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。

要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让火鸡冒充鸭子!

public interface Duck {
    void quack();
}
public interface Turkey {
    void gobble();
}
public class WildTurkey implements Turkey {
    @Override
    public void gobble() {
        System.out.println("gobble!");
    }
}
public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }
}
public class Client {
    public static void main(String[] args) {
        Turkey turkey = new WildTurkey();
        Duck duck = new TurkeyAdapter(turkey);
        duck.quack();
    }
}

JDK

模仿方法模式

策略模式(Strategy)

2018/7/11

意图

  • 定义一系列算法,封装每一个算法,并使它们能够互换。
  • 策略模式可让算法独立于使用它的客户端。

类图

  • Strategy 接口定义了一个算法族,它们都具备 behavior() 方法。
  • Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(in Strategy) 方法能够动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。

img

与状态模式的比较

状态模式的类图和策略模式相似,而且都是可以动态改变对象的行为。

可是状态模式是经过状态转移来改变 Context 所组合的 State 对象,而策略模式是经过 Context 自己的决策来改变组合的 Strategy 对象。

所谓的状态转移,是指 Context 在运行过程当中因为一些条件发生改变而使得 State 对象发生改变,注意必需要是在运行过程当中。

状态模式主要是用来解决状态转移的问题,当状态发生转移了,那么 Context 对象就会改变它的行为;而策略模式主要是用来封装一组能够互相替代的算法族,而且能够根据须要动态地去替换 Context 使用的算法。

实现

设计一个鸭子,它能够动态地改变叫声。这里的算法族是鸭子的叫声行为。

public interface QuackBehavior {
    void quack();
}
public class Quack implements QuackBehavior {
    @Override
    public void quack() {
        System.out.println("quack!");
    }
}
public class Squeak implements QuackBehavior{
    @Override
    public void quack() {
        System.out.println("squeak!");
    }
}
public class Duck {
    private QuackBehavior quackBehavior;

    public void performQuack() {
        if (quackBehavior != null) {
            quackBehavior.quack();
        }
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}
public class Client {
    public static void main(String[] args) {
        Duck duck = new Duck();
        duck.setQuackBehavior(new Squeak());
        duck.performQuack();
        duck.setQuackBehavior(new Quack());
        duck.performQuack();
    }
}
squeak!
quack!

JDK

  • java.util.Comparator#compare()
  • javax.servlet.http.HttpServlet
  • javax.servlet.Filter#doFilter()

责任链模式

装饰者模式

迭代器模式(Iterator)

2018/7/16

反应器模式

  1. 经常使用的八种掌握就行,原理,使用
  2. 单例、工厂、观察者重点

所了解的设计模式,单例模式的注意事项,jdk源码哪些用到了你说的设计模式

  • 所了解的设计模式
    • 工厂模式:定义一个用于建立对象的接口,让子类决定实例化哪个类, Factory Method 使一个类的实例化延迟到了子类。
    • 单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点;
    • 适配器模式:将一类的接口转换成客户但愿的另一个接口,Adapter 模式使得本来因为接口不兼容而不能一块儿工做那些类能够一块儿工做。
    • 装饰者模式:动态地给一个对象增长一些额外的职责,就增长的功能来讲, Decorator 模式相比生成子类更加灵活。
    • 代理:为其余对象提供一种代理以控制对这个对象的访问
    • 迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不须要暴露该对象的内部表示。
  • 单例模式的注意事项
    • 尽可能使用懒加载
    • 双重检索实现线程安全
    • 构造方法为private
    • 定义静态的Singleton instance对象和getInstance()方法
  • jdk源码中用到的设计模式
    • 装饰器模式:IO流中
    • 迭代器模式:Iterator
    • 单利模式: java.lang.Runtime
    • 代理模式:RMI

3、设计模式常见问题

1.什么是高内聚,低耦合?

附录:参考资料

卡奴达摩的专栏 - CSDN博客
https://blog.csdn.net/zhengzhb/article/category/926691/1

单例模式 - 23种设计模式 - 极客学院Wiki
http://wiki.jikexueyuan.com/project/java-design-pattern/singleton-pattern.html

https://www.bilibili.com/video/av18569541/

hexter 录制的课程 - 极客学院【23种设计模式】
http://my.jikexueyuan.com/hexter/record/

设计模式之禅

相关文章
相关标签/搜索