系统架构设计之一——设计模式

面对业务需求的频繁变更,一个良好架构设计可以方便我们更容易地复用/升级/移植/维护。而良好的设计就是设计模式。设计模式,是每一位架构师/开发工程师必须掌握的技能。

本文将从设计模式的概述/实现方式,经典设计模式的Java实现给出参考。

一 设计模式的概述

  1. 概念

设计模式解决的是一类问题,如创建问题/接口匹配问题等

设计模式是一种通用解决方案,为了提高软件架构的质量,一种软件架构风格,所以掌握其思想才是主要。不可乱套用设计模式,为了设计模式而设计,只会适得其反,变得混乱难以维护。

2.组成

一个设计模式至少包含四个方面:

-模式名称PatternName

-问题Problem

-解决方案Solution

-效果Consequence

每一个设计模式都有自己的应用场景,面对不同的问题采用不同的设计模式。

3.GoF设计模式

《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组(或 GoF)"书。

系统架构设计之一——设计模式

设计模式-英文版

所以,对于GoF提出的23个设计模式统称为GoF设计模式。

GoF提出的23种设计模式如下:

-FactoryMethod 工厂方法:解决运行时子类创建问题

-AbstractFactory 抽象工厂模式:解决复杂对象创建问题

-Builder模式:逐步构造复杂对象返回实例

-Prototype模式:复制原型创建新对象

-Singleton模式 :保证单实例全局访问单一

-Adapter模式:解决接口不兼容问题

-Bridge模式:把类的抽象部分和实现部分相分离,两者独立变化

-Composite模式:树形结构组合对象的方法,使单个对象和组合后的对象具有一致性

-Decorator模式:动态地为对象的某一个方法增加更多的功能

-Facade模式:给一组类提供一致的访问接口

-Flyweight模式:共享大量细粒度对象,节省创建对象需要的分配空间,时间开销大

-Proxy模式:为对象提供访问代理,如权限/地址控制

-Interpreter模式:定义解析容器,解析遵守给定语言和文法的句子

-TemplateMethod模式:通过操作模板,方便子类实现适用不同场景

-Chain of Responsibility 模式:将相应请求组成一条链,并在链对象上传递请求,保证多个对象请求可处理

-Command模式:将请求封装为对象,如参数化/日志/排队等

-Iterator模式:提供顺序访问一个对象集合的各种元素方法

-Mediator模式:减少对象间的耦合性,松耦合

-Memento模式:提供一种捕获对象状态的方法,且不破坏对象的封装

-Observer模式:将对象状态广播到一组观察者,开发过Android的同学应该很熟悉。

-State模式:运行一个对象在其内部改变的时候改变它的行为,Activity/小程序等生命周期就是这种。

-Strategy模式:让对象中算法的变化独立于客户

-Visitor模式:对对象结构中各种元素的操作,使Visitors模式可以不改变其元素类的前提下定义新操作。

系统架构设计之一——设计模式

23种设计模式思维导图

每一类设计模式是为了解决一种特定类型问题。

设计模式分类:创建型/结构型/行为型

4.其他设计模式

除了GoF23种设计模式,还有其他很多种设计模式,本质上每一种设计模式都是为了解决一种或者一类问题而提出的软件代码架构风格。

主流J2EE还总结出一些模式:

-InterceptingFilter模式:过滤器Filer链

-SessionFacade模式

二 常用设计模式Java实战

Abstract Factory 模式

案例:计算机类与PC机/Server服务器机子类的抽象工厂模式

类图

系统架构设计之一——设计模式

Java项目工程图:

系统架构设计之一——设计模式

源码分析:

//计算机抽象类
public abstract class Computer {}
//PC 机子类
public class PC extends Computer {}
//Server服务器机子类
public class Server extends Computer{}
//工厂抽象接口
public interface IComputerAbstractFactory {}
//PC 计算机工厂接口实现类,用于创建PC计算机实例

public class PCFactory implements IComputerAbstractFactory {}
//Server计算机工厂接口实现类,用于创建Server计算机实例
public class ServerFactory implements IComputerAbstractFactory {}
//创建一个消费者类,该类将提供客户端类创建子类的入口点
public class ComputerFactory {
/**
* 静态方法:用于创建对应子类的实例对象
* @param factory 需要的类的工厂接口类
* @return 对应的类的对象
*/
public static Computer getComputer(IComputerAbstractFactory factory){
return factory.createComputer();
}
}
//主函数测试
public class MainApp {
public static void main(String[] args) {
testAbstractFactory();
}
private static void testAbstractFactory() {
//通过ComputerFactory直接获取对象
Computer pc = ComputerFactory.getComputer(new PCFactory("2 GB","500 GB","2.4 GHz"));
Computer server = ComputerFactory.getComputer(new ServerFactory("16 GB","1 TB","2.9 GHz"));
//输出
System.out.println("AbstractFactory PC Config::"+pc);
System.out.println("AbstractFactory Server Config::"+server);
}
}

运行结果:

系统架构设计之一——设计模式

源码GitHub地址

https://github.com/1600690028/PattersMethod

三 写在最后

系统架构设计之一——设计模式

我们初步认知了架构设计中使用的设计模式,对此有了初步的认识。并且实战了抽象工厂模式。对于GoF的23种设计模式,我们还会继续进行实战分享,后续的设计模式实战请继续关注头条号:甫义工作室


分享到:


相關文章: