
面向对象的设计思想与设计模式
文章平均质量分 61
面向对象的设计思想与设计模式学习笔记
山闻愚
学无止境,持之以恒
展开
-
设计模式之状态模式(State Design Pattern)
状态模式,是11种行为型模式之一。一个生存在流程整个周期的对象,因事件触发改变对象的状态进而影响对象的行为(流程的走向)。状态模式就是把对象的行为与状态进行封装,通过改变状态进而影响行为。状态模式几个关键对象类型:Context:一个生存在流程整个周期的对象Event:触发改变对象的状态的事件(Event)或条件(Condition)State: 封装对象状态的抽象类(State)和具体实现类本文以请假流程为例,如图:请假流程有的主管、部门、人事部都有各自的职责,而且有先后依..原创 2021-04-06 09:53:13 · 395 阅读 · 0 评论 -
设计模式之职责链模式(Chain Of Responsibility Design Pattern)
职责链模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. 翻.原创 2021-03-22 10:04:34 · 199 阅读 · 0 评论 -
设计模式之策略模式(Strategy Design Pattern)
模板模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中,它是这样定义的:Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.翻译成中文就是:定义一系列算法(策略),封装每一个算法(策略),并使它们可以互换。使算法(策略)可以独立于使用它的客原创 2021-03-15 09:34:31 · 266 阅读 · 0 评论 -
设计模式之模板模式(Template Method Design Pattern)
模板模式,全称是模板方法设计模式,是11种行为型模式之一。在 GoF 的《设计模式》一书中是这么定义的:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.翻原创 2021-03-09 09:52:01 · 238 阅读 · 0 评论 -
设计模式之观察者模式(Observer Design Pattern)
观察者模式也被称为发布订阅模式,或者叫监听器模式大家更不觉得陌生,是11种行为型模式之一。观察者模式在平时运用的较多叫法也不一,常见的有观察者(Observer)、监听器(Listener)、订阅者(Subscriber)、消费者(Consumer)等,有观察者就会有被观察者,与观察者对应依次为主题(Subject)、分发器(Dispatcher),发布者(Publisher)、生产商(Producer)。在 GoF 的《设计模式》一书中,它的定义是这样的:Define a one-to-many原创 2021-03-04 15:31:30 · 509 阅读 · 2 评论 -
设计模式之享元模式(Flyweight Design Pattern)
享元模式是八种结构型模式之一,享元就是共享单元(元素)的意思,可以理解是共享对象。享元模式的用途就是复用对象,节省内存。如何使用享元模式,用棋牌室举例。斗地主相信很多人都玩过,一副版,黑红花方四色,每一色都有从2到A的13张牌,加上大小王,共有54张牌。假如一张牌就是一个对象,一张桌子就要54个对象;一个牌室300张桌子;一个服务器有50个牌室;这样的服务器可能又有200个。那这样的对象就是54*300*50*200=162000000个。...原创 2021-03-02 14:31:08 · 257 阅读 · 0 评论 -
设计模式之组合模式(Composite Design Pattern)
组合模式就是将一组对象组织成树形结构,以表示一种“部分 - 整体”的层次结构。组合让客户端可以统一单个对象和组合对象的处理逻辑。组合模式其实是代表的是一种树形数据结构。下面我们通过分析树形结构,一步步推演出组合模式。通过这种方式了解组合模式及它的作用。什么是树形结构,如图:用代码表示树的对象://叶子class Leaf { private String name;}//树枝class Branch { private String name; pr原创 2021-02-25 10:11:53 · 385 阅读 · 0 评论 -
设计模式之门面模式(Facade Design Pattern)
门面模式也叫外观模式,不管是门面或外观,意思都是提供想让外人看到的部分,隐藏不想被外人看到的部分。从代码角度理解,就是服务提供方通过门面模式来公开对外服务,隐藏内部服务实现的细节。门面模式的实现可通过两种方法:接口整合和接口隔离。下面我们用伪代码来举例说明:接口整合例子:服务提供方有A、B、C三个接口,调用方实现某个功能需要依次调用ABC三个接口。这样的设计增加了调用方调用的成本和调用的复杂度。可以使用门面模式通过接口整合的方法,把ABC三个接口整合成一个门面接口X,调用方只需要调用X接口就可以原创 2021-02-20 17:34:14 · 295 阅读 · 0 评论 -
设计模式之适配器模式(Adapter Design Pattern)
适配器是接口转换器,为需要在一起工作但不兼容的两个接口桥梁。适配器是常用的设计模式之一,现在是互联网时代,很多应用程序都会调用第三方的接口,比如支付接口、短信接口、验证码接口、数据对象存储接口等。而这些接口都是不一样的,如果在应用中要调用多个接口完成相同功能,就需要适配器。适配器在生活中也很常见,如果手机充电器,笔记本充电器,都是电源适配器。在我国家里所使用的是220伏的电源电压,美国等国外有的使用110V电源电压,而普遍的电子产品一般所需的电源电压为5伏至20伏左右。如果没有电源适配器,这些电子产原创 2021-02-20 11:02:26 · 337 阅读 · 0 评论 -
设计模式之装饰器模式(Decorator Design Pattern)
装饰器模式是常用设计模式之一,装饰器模式与代理模式非常像,区别是代理模式是原始功能上附加功能,而装饰器模式是增强原始功能。代理模式:我(代理)不是你(原始类),我只是代表你的(部分或全部)能力,不会改变你的能力;装饰器模式:我(装饰器)就是你(原始类),我是你的伪装,不仅有你的全部能力,还可以改变你的能力;//人类interface HumanBeing { //速度 public void velocity(); //反应 public void reaction();原创 2021-02-08 10:50:25 · 357 阅读 · 0 评论 -
设计模式之桥接模式(Bridge Design Pattern)
桥接模式(Bridge Design Pattern),也叫作桥梁模式。在 GoF 的《设计模式》一书中,桥接模式是这么定义的:“Decouple an abstraction from its implementation so that the two can vary independently。”翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化”。桥梁模式从名字来看很具象,但从定义来看又很抽象难懂。对于初学设计模式,桥梁最难理解的一种模式之一。本文我们从一个飞机的例子慢慢演化,来理解桥原创 2021-02-03 10:23:02 · 615 阅读 · 0 评论 -
设计模式之代理模式(Proxy Design Pattern)
代理模式(Proxy Design Pattern)是在不改变原始类(或叫被代理类)输入输出的前提下,通过引入代理类来给原始类附加功能。这个附加功能对于调用者是无感知的。调用者不能直接接触到原始类,而是通过代理类来调用原始类的功能。从设计原则来分析代理模式的作用:接口隔离原则:代理类可以只代理原始类部分功能,隔离调用者不需要的功能。开闭原则:可以在代理类增加附加功能,原始类则不需要修改。单一职责原则:原始类专注他的职责,代理类专注附加功能。避免与原始类职责无关的附加功能与原始类进行耦合。原创 2021-01-29 17:43:00 · 358 阅读 · 1 评论 -
设计模式之原型模式(Prototype Design Pattern)
原型模式,可以理解为克隆模式,就是对一个已创建的对象进行克隆。这个对象必须提供克隆的方法。我们先看一个简单的例子://实现Cloneable ,重写clone方法,使用对象提供克隆的能力public class Article implements Cloneable { public Article(){ System.out.println("初始化"); } public Article clone() { System.out.原创 2021-01-27 09:27:18 · 247 阅读 · 0 评论 -
设计模式之工厂模式(Factory Design Pattern)
工厂模块就是为了创建一类对象而设计的模式,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。一个普通人,白手起家,在服装厂工作几年后,想自己当老板,但是又没有太多的资金。只能租个小厂房(作坊)帮别人加工产品。所有的产品不管是生产衣服、帽子、袜子还是内裤都这个小厂房里生产。简单工厂模式,可以理解为一个作坊模式。简单工厂模式平时是用的最多最常见的。//服装interface Clothing { //...}//夹克class Jacket implements Clo原创 2021-01-19 10:06:01 · 400 阅读 · 0 评论 -
设计模式之单例模式(Singleton Design Pattern)
单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。原创 2021-01-18 08:45:32 · 278 阅读 · 2 评论 -
面向对象的设计原则
面向对象的设计原则目录单一职责原则(SRP)开闭原则里式替换原则接口隔离原则依赖反转原则单一职责原则(SRP)单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP。这个原则的英文描述是这样的:A class or module should have a single responsibility。如果我们把它翻译成中文,那就是:一个类或者模块只负责完成一个职责(或者功能)。我们举个例子,几乎每个系统都有一个用户模块(use原创 2020-12-31 16:36:20 · 256 阅读 · 0 评论 -
设计原则之依赖反转原则(DIP)
依赖反转原则的英文翻译是“ Dependency Inversion Principle”,缩写为 DIP。Robert Martin 在 SOLID 原则中是这样定义它的:“High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details dep原创 2020-12-31 14:39:54 · 419 阅读 · 1 评论 -
多用组合少用继承的设计思想
为什么多用组合少用继承?继承最大的问题就在于:容易继承层次过深、继承关系过于复杂会影响到代码的可读性和可维护性。为什么继承容易过深过复杂?继承是实现多态的手段,当态太多时,就容易导致过于复杂和过深。比如:水...原创 2020-12-22 11:16:52 · 217 阅读 · 0 评论 -
基于接口(抽象)而非实现编程的设计思想
基于接口而非实现编程的设计思想,首先理解接口是什么?广义上“接口”有两类,第一类是面向对象编程语言中的抽象类(如java中的interface类、abstract类),第二类是两个系统或服务之间的API或协议等。那么为什么要基于接口而非实现编程,这样做有什么好处?基于接口而非实现编程,将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统或服务(简称上游)面向接口,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游的代码基本上不需要做改动,以此来降低代码间的耦合性,提高下游代码的扩展原创 2020-12-21 15:27:31 · 253 阅读 · 0 评论