
Design patterns
Design patterns
每天只学一点点
If you are good at something, never do it for free。
展开
-
DesignPattern_桥梁模式_23
桥梁模式定义Decouple an abstraction from its implementation so that the two can vary independently.将抽象和实现解耦,使得两者可以独立地变化。Abstraction——抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。Implementor——实现化角色:它是接口或者抽象类,定义角色必需的行为和属性。RefinedAbstraction——修正抽象化角色:它引原创 2020-12-22 18:48:10 · 136 阅读 · 0 评论 -
DesignPattern_享元模式_22
享元模式定义Use sharing tosupport large numbers of fine-grained objects efficiently.使用共享对象可有效地支持大量的细粒度的对象。对象的内部状态和外部状态:内部状态:内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变,如我们例子中的id、postAddress等,它们可以作为一个对象的动态附加信息,不必直接储存在具体某个对象中,属于可以共享的部分。外部状态:外部状态是对象得以依赖的一个标记,是随环境改原创 2020-12-22 18:07:29 · 103 阅读 · 0 评论 -
DesignPattern_解释器模式_21
解释器模式解释器模式是一个缺点比优点要多的东西。总的来说,尽量不要使用,专业的事情交给专业的工具来,不要乱来定义Given a language, define a representation for its grammar along with aninterpreter that uses the representation to interpret sentences in the language.给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句原创 2020-12-22 17:32:42 · 102 阅读 · 0 评论 -
DesignPattern_状态模式_20
状态模式定义Allow an object to alter its behavior when its internal state changes.The object will appear tochange its class.当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类。State——抽象状态角色接口或抽象类,负责对象状态定义,并且封装环境角色以实现状态切换。ConcreteState——具体状态角色每一个具体状态必须完成两个职责:本状态的行为管理以及趋向状原创 2020-12-22 16:33:07 · 91 阅读 · 0 评论 -
DesignPattern_访问者模式_19
访问者模式定义Represent anoperation to be performed on the elements of an object structure. Visitor lets you define a newoperation without changing the classes of the elements on which it operates.封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。Visitor—原创 2020-12-21 18:48:57 · 178 阅读 · 0 评论 -
DesignPattern_备忘录模式_18
备忘录模式设计模式看到这里,我已经有些不想再看下去了,看过的设计模式基本上也都可以理解,之前看过的设计模式在我自己看来只有两类,一种是让代码更加繁杂,虽然使代码复用性提高,但是却使可读性降低,真实代码中不会去使用的;第二种则是,即使我不知道存在这种设计模式的时候也会去使用的,即使不看我也在用。现在看下去的原因大概只是为了看源码和面试题之类的吧。之后应该也会去用一些设计模式,用那种即使不懂设计模式的人也能看得懂的设计模式。我认为大道至简,代码也该如此。就像这个备忘录模式,为了上一个记录我会考虑定义一个p原创 2020-12-21 17:51:23 · 89 阅读 · 0 评论 -
DesignPattern_门面模式_17
门面模式定义Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-levelinterface that makes the subsystem easier to use.要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式。F原创 2020-12-21 16:01:37 · 99 阅读 · 0 评论 -
DesignPattern_观察者模式_16
文章目录观察者模式定义优点缺点代码实现观察者模式定义Define a one-to-many dependency between objects so that when one object changes state,all itsdependents are notified and updated automatically.定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式(Observer Pattern)也叫做发布订阅原创 2020-12-21 15:35:48 · 84 阅读 · 0 评论 -
DesignPattern_组合模式_15
文章目录组合模式定义优点使用场景代码实现基础代码组合模式后话组合模式定义ompose objects into tree structures to represent part-whole hierarchies.Composite lets clientstreat individual objects and compositions of objects uniformly.将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式(Comp原创 2020-12-21 10:37:29 · 97 阅读 · 0 评论 -
DesignPattern_迭代器模式_14
文章目录迭代器模式定义代码实现基础代码迭代器模式迭代器模式学习自 《设计模式之禅(第二版)》定义Provide a way to access the elements of an aggregate object sequentially without exposing itsunderlying representation.它提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器是为容器服务的,那什么是容器呢?能容纳对象的所有类型都可以称之为容器,例如Collect原创 2020-12-18 17:46:42 · 85 阅读 · 2 评论 -
DesignPattern_适配器模式_13
文章目录适配器模式定义优点代码实现适配器模式学习自 《设计模式之禅(第二版)》定义Convert the interface of a class into another interface clients expect.Adapter lets classes worktogether that couldn’t otherwise because of incompatible interfaces.一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能原创 2020-12-18 17:15:12 · 103 阅读 · 1 评论 -
DesignPattern_策略模式_12
文章目录策略模式定义优点缺点使用场景代码实现策略模式策略枚举策略模式学习自 《设计模式之禅(第二版)》定义Define a family of algorithms,encapsulate each one,and make them interchangeable.定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。Context封装角色它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色策略、算法家族的原创 2020-12-18 15:45:48 · 97 阅读 · 1 评论 -
DesignPattern_装饰模式_11
文章目录装饰模式定义优点缺点使用场景代码实现基础代码装饰模式装饰模式学习自 《设计模式之禅(第二版)》定义Attach additionalresponsibilities to an object dynamically keeping the same interface.Decorators provide a flexiblealternative to subclassing for extending functionality.动态地给一个对象添加一些额外的职责。就增加功能来说,装饰原创 2020-12-18 14:33:07 · 101 阅读 · 0 评论 -
DesignPattern_责任链模式_10
文章目录责任链模式定义优缺点代码实现基础代码责任链代码实现责任链模式定义Avoid coupling the sender of a request to its receiver by giving more than one object a chance tohandle the request.Chain the receiving objects and pass the request along the chain until an objecthandles it.使多个对象都有机会原创 2020-12-17 16:20:34 · 86 阅读 · 0 评论 -
DesignPattern_命令模式_09
文章目录命令模式定义命令模式优点代码实现基础实现命令模式命令模式学习自 《设计模式之禅(第二版)》定义Encapsulate a request as an object,therebyletting you parameterize clients with different requests,queue or log requests,and support undoableoperations.将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以原创 2020-12-17 15:10:44 · 85 阅读 · 0 评论 -
DesignPattern_中介者模式_08
文章目录代码实现代码实现迪米特法则认为“每个类只和朋友类交流”,这个朋友类并非越多越好,朋友类越多,耦合性越大package design.mediator;import java.util.Random;/** * @author huangqh * @create 2020/12/15 10:33 * @Notes 销售管理 */public class Purchase { //采购IBM电脑 public void buyIBMcomputer(int num原创 2020-12-17 14:17:33 · 104 阅读 · 0 评论 -
DesignPattern_代理模式_07
文章目录代理模式代码实现普通代理强制代理动态代理代理模式学习自 《设计模式之禅(第二版)》代码实现package design.proxy;/** * @author huangqh * @create 2020/12/8 16:27 * @Notes 代理模式 */public class Proxy {}/** * Subject 抽象主题角色 */interface IGamePlayer { public void login(String name, St原创 2020-12-09 10:58:06 · 172 阅读 · 0 评论 -
DesignPattern_建造者模式_05
文章目录建造者模式定义建造者模式的优点建造者模式使用场景代码实现建造者模式学习自 《设计模式之禅(第二版)》定义Separate the construction of a complex objectfrom its representation so that the sameconstruction process can create differentrepresentations.将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。角色:Product产品类原创 2020-12-08 15:00:24 · 89 阅读 · 0 评论 -
DesignPattern_模板方法模式_06
文章目录模板方法模式定义模板方法模式优点模板方法模式的缺点模板方法模式的使用场景代码实现基础代码模板方法代码模板方法模式学习自 《设计模式之禅(第二版)》定义模板方法:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。基本方法:由子类实现的方法,并且在模板方法中被调用。模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。模板方法模式优点封装不变部分,扩展可变部分行为由父类原创 2020-11-02 13:19:41 · 210 阅读 · 0 评论 -
DesignPattern_原型模式_04
文章目录原型模式基本介绍代码实现浅拷贝基本介绍深拷贝基本介绍代码实现原型模式基本介绍原型模式(Prototype)是指:在原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象原型设计模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象.clone()通俗理解 Ctrl+C、V,对象的复制粘贴。在Spring源码中 scope=“原创 2020-09-13 02:08:08 · 256 阅读 · 0 评论 -
DesignPattern_工厂模式(工厂方法 抽象工厂)_02、03
文章目录简单工厂模式基本介绍代码实现简单工厂模式基本介绍 简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单使用的模式 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码) 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式代码实现/** * @author huangqh * @create 2020/9/10 0:42 * @Note 简单工厂原创 2020-09-12 22:42:51 · 363 阅读 · 0 评论 -
DesignPattern_单例模式_01
文章目录设计模式三种类型单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全懒汉式)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举注意事项设计模式设计模式不是代码,而是某类问题的通用解决方案提高软件的维护性,通用性和扩展性,降低软件的复杂度设计模式并不局限于某种语言三种类型创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式结构性模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式行为型模式:模板方法模式原创 2020-09-09 23:40:16 · 355 阅读 · 0 评论 -
DesignPattern_07_合成复用原则
文章目录合成复用原则代码描述设计原则的核心思想合成复用原则原则是尽量使用合成/聚合的方式而不是继承继承具有侵入性,耦合性增强代码描述/** * @author huangqh * @create 2020/9/8 12:51 */public class composite { public static void main(String[] args) { new E().q.operation1(); new R().q.operation1原创 2020-09-08 13:03:40 · 137 阅读 · 0 评论 -
DesignPattern_06_迪米特法则
文章目录迪米特法则代码问题代码迪米特法则注意迪米特法则一个对象应该对其他对象保持最少的了解类与类之间的关系越密切,耦合度越大迪米特法则(Demeter Principle)又叫最少知道法则,即一个类对自己依赖的类知道的越少越好,也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部,对外除了提供public方法,不对外泄漏任何信息迪米特法则还有个更简单的定义:只与直接的朋友通信直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系,原创 2020-09-08 02:27:39 · 149 阅读 · 0 评论 -
DesignPattern_05_开闭原则
文章目录开闭原则代码编写问题代码开闭原则开闭原则Open Closed Principle开闭原则是编程中最基础的、最重要的设计原则一个软件实体如类,模块,函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码实现变化编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则代码编写问题代码/** * @author huangqh * @create 2020/9/8 1:28 */pub原创 2020-09-08 01:51:34 · 113 阅读 · 0 评论 -
DesignPattern_04_里氏替换原则
文章目录里氏替换原则问题描述解决办法代码实现传统代码里氏替换里氏替换原则Liskov Substitution Principle, LSP继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障。里氏替换原则:如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1原创 2020-09-08 00:26:26 · 117 阅读 · 0 评论 -
DesignPattern_03_依赖倒置原则
文章目录依赖倒置原则问题描述解决思路代码实现传统方式依赖倒置_接口传递实现依赖依赖倒置_构造方法传递实现依赖依赖倒置_Setter方法传递实现依赖注意事项依赖倒置原则 依赖倒置原则(Dependence Inversion Principle) 1. 高层模块不应该依赖底层模块,二者都应该依赖其抽象 2. 抽象不应该依赖细节,细节应该依赖抽象 3. 依赖倒置的中心思想是面向接口编程 4. 依赖倒置原则是基于这样的设计理念:相对于细节的多边形,抽象的东西要稳定的多.以抽象为基础 搭建的架构比以原创 2020-09-03 18:22:44 · 115 阅读 · 0 评论 -
DesignPattern_02_接口隔离原则
文章目录接口隔离原则问题描述解决思路代码实现传统方法接口隔离接口隔离原则Interface Segregation Principle客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上问题描述类A通过接口Interface1依赖类B,类C通过interface1依赖类D,如果接口Interface1对于类A和类C都不是最小接口,那么类B和类D必须去实现他们不需要的方法解决思路按隔离原则应该这样处理: 将接口interface1拆分成为独立的几个接口,类A和类C原创 2020-09-03 17:32:22 · 108 阅读 · 0 评论 -
DesignPattern_01_单一职责原则
文章目录单一职责注意事项代码设计模式是对软件设计中普遍存在的各种问题,所提出的解决方案.设计模式使程序具有:代码重用性可读性可扩展性可靠性使程序呈现高内聚低耦合的特性单一职责对于类来说,即一个类只负责一项职责.注意事项降低类的复杂度,一个类只负责一项职责提高类的可读性,可维护性降低变更引起的风险在通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则:只有类中方法数量足够少,可以在方法级别保持单一职责原则代码/** * @Author:原创 2020-08-12 17:17:28 · 131 阅读 · 0 评论