Java 中一般认为有23种设计模式,我们不需要学会所有的,但是应该掌握其中常见的几种设计模式。总体来说设计模式分为三大类:创建型模式、结构型模式、行为型模式。掌握了设计模式,我们可以写出高质量的代码,来体现代码的优美性。设计模式是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。


结构型模式(7种)
结构型模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

Java设计模式详解之结构型模式
1.适配器设计模式

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式

类的适配器模式
public class Source {
public void method1() {
System.out.println(“this is original method!”);
}
}

public interface Targetable {
/* 与原类中的方法相同 /
public void method1();
/
新类的方法 */
public void method2();
}
public class Adapter extends Source implements Targetable {
@Override
public void method2() {
System.out.println(“this is the targetable method!”);
}
}
public class AdapterTest {
public static void main(String[] args) {
Targetable target = new Adapter();
target.method1();
target.method2();
}
}
对象的适配器模式
基本思路和类的适配器模式相同,只是将 Adapter 类作修改,这次不继承 Source 类,而是持有 Source 类的实例,以达到解决兼容性的问题

public class Wrapper implements Targetable {
private Source source;
public Wrapper(Source source) {
super();
this.source = source;
}
@Override
public void method2() {
System.out.println(“this is the targetable method!”);
}
@Override
public void method1() {
source.method1();
}
}

public class AdapterTest {
public static void main(String[] args) {
Source source = new Source();
Targetable target = new Wrapper(source);
target.method1();
target.method2();
}
}
接口的适配器模式
接口的适配器是这样的:有时我们写的一个接口中有多个抽象方法,当我们写该接口的实现类时,必须实现该接口的所有方法,这明显有时比较浪费,这时候可以借助于一个抽象类,该抽象类实现了该接口,实现了所有的方法,而我们不和原始的接口打交道,只和该抽象类取得联系,所以我们写一个类,继承该抽象类,重写我们需要的方法就行。

2.桥接模式

定义:将抽象部分与实现部分分离,使它们都可以独立的变化。

简介:在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?这就要使用桥接模式。桥接模式需要重点理解的抽象部分,实现部分,脱耦。一个典型的例子是咖啡加糖问题,抽象部分有Coffee,其下有LargeCoffee,SmallCoffee,实现部分是CoffeeAdd,其下有Sugar,Normal,抽象类Coffee中引用CoffeeAdd,这样CoffeeAdd其实就是一个桥接。

3.装饰模式

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个 接口,装饰对象持有被装饰对象的实例。

4.组合模式

定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

简介:组合模式理解起来相对简单,典型的例子就是假设公司A,里面有不同的部门,不同的部分下有不同的员工,这样一个部门下的所有员工组合成了一个部门,所有部门组合成了整个公司。

5.外观模式

定义:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

简介:外观模式的一个典型例子是去医院看病,挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。

6.享元模式

定义:运用共享技术有效地支持大量细粒度的对象。

简介:在有大量对象时,有可能会造成内存溢出,我们把其***同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

7.代理模式

定义:代理模式是指一个对象辅助另一个对象去做某件事,同时还可以增加一点辅助功能。

简介:代理模式主要解决在直接访问对象时带来的问题。