设计模式学习
文章平均质量分 53
一天进步一点点!
林立可
加点油呢!路还有那么长!
展开
-
置顶——设计模式总结
置顶——设计模式总结设计模式的使用并不是生搬硬套,都需要结合具体的业务场景选择合适的设计模式。高效代码所具备的特点,无非是解耦与封装,只是在不同的场景中他有了不同的设计模式体现。而且,实际使用中,大都是多个模式同时使用,以更好的提升使用效率。本系列设计模式主要由学习谭勇德老师**《设计模式就该这样学》**的学习笔记整理而来。同时,也参考整理了以下内容:https://www.runoob.com/design-pattern/design-pattern-tutorial.htmlorial.原创 2021-03-30 19:55:28 · 296 阅读 · 0 评论 -
【设计模式】23,访问者模式
(二十三)访问者模式访问者模式(Visitor Pattern)是一种将数据结构与数据操作分离的设计模式。1,访问者模式的设计原则1,抽象访问者(IVisitor):接口或抽象类,定义一个visit()方法;2,具体访问者(ConcreateVisitor):具体元素的操作;3,抽象元素(IElement):定义一个接收访问者访问的方法accept();4,具体元素(ConcreateElement):接收访问者的具体实现;5,结构对象(ObjectStructure):内部维护一个元素集合,原创 2021-08-25 16:47:55 · 133 阅读 · 0 评论 -
【设计模式】22,观察者模式
(二十二)观察者模式观察者模式(Observer Pattern)也叫做发布-订阅模式,通过定义一种一对多的依赖关系,被观察者的变动能够及时通知到观察者。通过一种类似消息发布的机制,实现了二者的解耦。1,观察者模式的设计原则1,抽象主题(ISubject):定义通知观察者对象的抽象方法;2,具体主题(ConcreateSubject):具体被观察者;3,抽象观察者(IObserver):定义响应通知的更新方法;4,具体观察者(ConcreateObserver):做出响应。2,简单例子通过J原创 2021-08-25 16:46:45 · 115 阅读 · 0 评论 -
【设计模式】21,解释器模式
(二十一)解释器模式解释器模式(Interpreter Pattern)给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。1,解释器模式的设计原则1,抽象表达式(IExpression):,定义抽象方法interpret;2,终结符表达式(TerminalExpression):实现文法中与终结符有原创 2021-08-25 16:45:32 · 206 阅读 · 0 评论 -
【设计模式】20,中介者模式
(二十)中介者模式中介者模式(Mediator Pattern)指通过一个中介对象实现系统间的访问,使得系统中各对象不需要显式地相互作用,做到解耦。1,中介者模式的设计原则1,抽象中介者(Mediator):定义一个抽象的统一接口;2,具体中介者(ConcreteMediator):处理具体的对象信息;3,抽象同事(Colleague):每一个同事都需要依赖中介者角色,与其他同事通信;4,具体同事(ConcreateColleague):负责实现自发行为。2,简单例子聊天室将各聊天对象隔离原创 2021-07-06 08:43:56 · 123 阅读 · 0 评论 -
【设计模式】19,备忘录模式
(十九)备忘录模式备忘录模式(Memento Pattern)指在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。类似于快照机制。1,备忘录模式的设计原则1,发起人(Originator):负责创建一个备忘录,记录自身需要保存的状态;2,备忘录(Memento):用于存储Originator的内部状态,且可以防止Originator以外的对象进行访问;3,备忘录管理员(Caretaker):负责备忘录的管理与创建。2,简单案例草稿箱的实现就是一个备忘录的形式,通过草稿箱原创 2021-07-06 08:41:24 · 149 阅读 · 0 评论 -
【设计模式】——18,状态模式
(十八)状态模式状态模式(State Pattern)允许对象在内部状态发生变化时改变他的状态,类的行为是基于它的状态改变的。1,状态模式的设计原则1,环境类(Context):定义客户端需要的接口,内部维护一个当前状态实例,负责状态切换;2,抽象状态(IState):定义状态的行为;3,具体状态(Concreate):具体状态的行为。2,简单例子我们在社区阅读文章时,评论和收藏等操作都是需要在登录状态下进行的,否则将统一跳转到登录页面。下面就利用状态模式实现上述场景。public abs原创 2021-06-29 20:26:52 · 140 阅读 · 1 评论 -
【设计模式】——17,命令模式
(十七)命令模式命令模式(Command Pattern)指对命令进行封装,命令模式解耦了请求方和接收方,请求方只需执行请求命令,而不需关心请求如何执行及是否执行等。1,命令模式的设计原则接收者(Receiver):具体实施或执行一个请求;命令角色(ICommand):定义需要执行的所有命令;具体命令(ConcreateCommand):内部维护一个Receiver,在执行方法中调用Receiver的相关方法;请求者(Invoker):接收命令并执行。2,简单例子播放器中播放功能,暂停功能原创 2021-06-29 20:25:44 · 199 阅读 · 1 评论 -
【设计模式】——16,迭代器模式
(十六)迭代器模式迭代器模式(Iterator Pattern)通过提供一种按顺序访问集合/容器的方法,而不暴露集合内部表示。它可以为不同的容器提供统一的遍历行为,而不用关心容器内元素的构造。1,迭代器模式设计原则1,抽象迭代器(Iterator):抽象迭代器定义访问和遍历元素接口;2,具体迭代器(ConcreateIterator):提供具体遍历行为;3,抽象容器(IAggregate):定义提供具体迭代器的接口;4,具体容器(ConcreateAggregate):创建具体迭代器。2,简单原创 2021-06-29 20:23:20 · 191 阅读 · 2 评论 -
【设计模式】——15,责任链模式
(十五)责任链模式责任链模式(Chain of Responsibility Pattern)将链中每一个节点都看作一个对象,每个节点负责处理不同的请求,并且在内部自动维护下一个节点对象。通过责任链模式,很好的实现了解耦,对象节点各司其责。1,责任链模式设计原则抽象处理者(Handler):定义一个请求处理方法,并维护一个下一处理对象节点的引用;具体处理者(ConcreateHandler):对请求进行处理。2,简单例子在登录的业务逻辑中,需要对用户信息进行验证,判断,认证等操作,通过使用责任链原创 2021-06-19 15:35:47 · 145 阅读 · 0 评论 -
【设计模式】——14,策略模式
(十四)策略模式策略模式(Stragey Pattern)指通过封装使得各个算法或组件可以互相替换和组合,在不同的场景选择不同的策略灵活处理问题。1,策略模式的设计原则上下文(Context):用来操作策略的上下文环境,屏蔽高层模块对算法的直接访问;抽象策略(IStragey):策略或算法的顶级接口;具体策略(ConcreteStragey):具体策略。2,简单例子支付场景中,通常会有多做支付方式供选择,使用策略模式对多种支付策略进行管理。public abstract class Pay原创 2021-06-19 15:28:38 · 285 阅读 · 0 评论 -
13,模板模式
(十三)模版模式模版模式(Template Pattern)指定义一个算法框架,将一些步骤延迟到子类中,使得子类在不改变该算法结构的情况下对某些步骤进行重构。实际上就是封装一些公共方法,供子类调用。1,模版模式设计原则1,抽象模版(AbstractClass): 定义一系列框架步骤;2,具体实现(ConcrateClass):具体实现。2,简单例子比如课程发布的步骤是:发布预习资料,制作PPT,直播,提交笔记,布置作业,检查作业。public abstract class AbstractCo原创 2021-05-21 09:14:47 · 88 阅读 · 2 评论 -
12,桥接模式
(十二)桥接模式桥接模式(Bridge Pattern)指将抽象部分与具体实现部分相分离,使得它们都可以独立的变化。它的核心是使用组合而不是继承表征类之间的关系。通常,对于有两个变化维度的系统来说,使用桥接模式能够提高系统的扩展性。1,桥接模式的设计原则抽象类(Abstraction):持有一个对实现类的引用;修正抽象类(RefinedAbstraction):对Abstraction的方法进行扩展;实现类接口(IImplementor):确定实现维度的基本操作,提供给抽象类使用;具体实现(Co原创 2021-05-21 09:07:59 · 180 阅读 · 0 评论 -
11,适配器模式
(十一)适配器模式适配器模式(Adapater Pattern)指原有接口和现有接口不匹配,通过添加一个中间层来使得接口能够互通。我们日常使用的电源适配器就是一个很好的例子,他将额定电压220v交流电转换为为手机充电的5v直流电。通常又有类适配器,对象适配器,接口适配器的区分。1,适配器模式的设计原则1,目标角色(ITarget):期望的接口;2,源角色(Adaptee):我们需要改变的接口;3,适配器(Adapter):用于转换的适配器。类适配器实现:Adapter 实现 ITarget 接原创 2021-05-16 11:45:01 · 154 阅读 · 0 评论 -
10,组合模式
(十)组合模式组合模式(Composite Pattern)指通过将单个对象和组合对象用相同的接口进行表示,使得客户对单个对象和组合对象的使用具有一致性。组合模式一般用来描述整体与部分的关系。比如传统的文件树模型中,根结点和树结点,树结点下面又包括叶子结点和树结点。1,组合模式的设计原则1,公共组件(Component):定义公共接口方法;2,叶子结点(Leaf):3,树枝结点 (Composite):透明组合模式:将所有的公共方法定义在component中,叶子和树枝具备完全一致的访问接口;原创 2021-05-16 11:41:13 · 97 阅读 · 0 评论 -
9,享元模式
(九)享元模式享元模式(Flyweight Pattern)又叫做轻量级模式,指通过对频繁使用的对象进行缓存,是对象池的一种实现。进而避免频繁的创建对象,降低内存消耗。享元模式中,可将对象分为内部状态和外部状态两种,内部状态即不变的部分,将不变得部分进行共享提升性能。1,享元模式的设计原则1,抽象享元(IFlyweight):享元对象的抽象基类或接口,定义对象状态;2,具体享元(ConcreateFlyweight):具体享元(又可以分为共享和非共享);3,享元工厂(FlyweightFactor原创 2021-05-02 22:48:32 · 153 阅读 · 0 评论 -
8,装饰器模式
(八)装饰器模式装饰器模式(Deorator)指在不改变原有对象的基础上,动态的给一个对象添加功能。它是通过关联机制,即在一个类中嵌入另一个类的对象的引用。与继承的方式实现功能扩展相比更加灵活。1,装饰器模式设计原则1,抽象组件(Component):接口或抽象类,用于定义被装饰对象的行为。2,具体组件(ConcreateComponent):实现或基础抽象组件的一个具体组件,即被装饰对象。3,抽象装饰器(Decorator):即具体装饰器的通用抽象,其内部有一个属性指向Component。4,原创 2021-05-02 22:42:48 · 107 阅读 · 0 评论 -
7,外观模式
(七)外观模式外观模式(Facade Pattern)指通过一个统一的接口,用来访问子系统中的一群接口。这样可以将一系列复杂的模块通过一个统一的窗口向外提供服务。1,外观模式设计原则1,外观角色(Facade):系统对外提供的统一接口。2,子系统角色(SubSystem):子系统,2,简单例子以积分兑换商品为例子,该行为将有3个服务,积分、支付、物流,现通过统一商品服务入口使用外观模式管理。public class Gift { private String name; pu原创 2021-05-02 22:36:16 · 134 阅读 · 0 评论 -
6,代理模式
(六)代理模式代理模式(Proxy Pattern)指为其他对象提供一种代理,以控制这个对象的访问。当无法或者不想直接引用某个对象时,或者访问某个对象存在困难时,可以通过代理对象来访问。代理模式的两个主要目标:1,保护目标对象;2,增强目标对象。1,代理模式的设计原则1,抽象主题(ISubject):负责声明真实主题与代理类的共同接口方法;2,真实主题(RealSubject):即被代理类;3,代理主题(Proxy):即代理类,在内部持有真实主题的引用,因此具有代理权。2,简单例子代理有两种原创 2021-04-22 22:21:55 · 141 阅读 · 0 评论 -
5,建造者模式
(五)建造者模式建造者模式(Builder Pattern)将一个复杂对象的创建和表示相分离,使得同样的构建可以创建不同的表示。他和工厂模式有些相似。1,建造者模式设计原则1,产品(Product):创建的产品对象;2,抽象创建者(IBuilder):建造者的抽象类;3,建造者(Concrete Builder):具体的builder类;4,调用者(Director):也即客户端。2,简单案例课程可以提供多做服务,而服务的顺序也有多重组合:public class Course {原创 2021-04-22 22:15:26 · 101 阅读 · 0 评论 -
【设计模式】——4,原型模式
(四)原型模式原型模式(Prototype Pattern)指的是创建对象的方式为复制对象,而非new。它以系统中已存在的对象为原型。1,原型模式设计原则1,客户(Client):客户进行创建对象;2,抽象原型(IPrototype):提供复制对象;3,具体原型(ConceratePrototype):被复制对象。2,简单案例我们使用java自带的(浅)克隆方式实现基于原型对象的复制。浅克隆:复制对象方式为复制引用,对象的改变会影响原对象;深克隆:复制对象方式为单纯复制,对象的改变不会影响原创 2021-04-12 22:40:55 · 172 阅读 · 0 评论 -
【设计模式】——3,单例模式
(三)单例模式单例模式(Singleton Pattern)指一个类确保在任何情况下只会有一个实例,并提供一个全局访问点 。单例类拥有一个私有的构造函数,确保不能通过new关键字进行新建对象;同时单例类有一个全局的静态变量以及一个静态工厂方法创建实例,并存储在静态变量中。1,单例模式设计原则单例类只能有一个实例;单例类必须自己创建自己的实例;单例类必须给所有对象提供这个实例。2,简单案例2.1,饿汉式单例按照上诉方式创建一个单例模式demo:public class HungryS原创 2021-03-30 19:50:22 · 111 阅读 · 0 评论 -
【设计模式】——2,抽象工厂模式
(二)抽象工厂模式抽象工厂模式很好的解决了工厂模式中一个工厂子类只负责创建一个产品的弊端。这里先引用一下产品族和产品等级的概念:产品族:就是一个产品系,比如美的牌空调,洗衣机,电饭煲等;类似还有格力、奥克斯等;产品等级:就是一个产品类,比如美的空调,格力空调,奥克斯空调等;都是空调类。因此,当有多个产品等级结构时,抽象工厂可以用一个工厂等级结构创建多个不同产品等级结构的产品对象;而工厂方法模式面对的更多的是一个产品等级结构。这便是二者的主要区别。所以,当一个工厂等级结构可以创建出分属于不同产品等级结原创 2021-03-30 19:49:08 · 136 阅读 · 0 评论 -
【设计模式】——1,工厂模式
(一)工厂模式工厂模式又叫做多态性工厂模式,指定义一个创建对象的接口,由实现这个接口的类去决定实例化哪个类,工厂方法把类的实例化延迟到子类进行。在工厂模式中,不再由一个工厂负责所有实例,而是由工厂的子类负责。满足单一原则,也解决了产品过多时,工厂类过于臃肿的问题。1,工厂模式的设计原则抽象工厂(IFactory):所有工厂方法的父类;具体工厂(ConcreateFactory):实现抽象工厂的具体工厂;抽象产品(IProduct):所有产品的父类;具体产品(ConcreateProduct)原创 2021-03-30 19:48:31 · 226 阅读 · 0 评论 -
【设计模式】——0,简单工厂模式
(零)简单工厂模式工厂模式的使用原则就是将构造复杂对象的工作交给指定的人去做。调用者不需要关心具体如何实现,只需要传入自己想要的工厂类参数即可。简单工厂模式专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式,也叫静态工厂模式,它并不在我们常说的23种设计模式之中。1,简单工厂模式的设计原则:简单工厂(SimpleFactory):负责实现所有实例的内部逻辑,由他指定该实例哪种产品。抽象产品(IProduct):所有产品实例的顶级接口。具体产品(Concre原创 2021-03-30 19:45:43 · 245 阅读 · 0 评论 -
软件设计模式的七大原则
软件架构设计七大原则1,开闭原则开闭原则(Open-Closed Principle,OCP)指一个软件实体如类,模块和函数应该对扩展开放,对修改关闭,以提高系统的复用性和可维护性。在功能改动或升级时,尽可能的不修改源码,而是通过继承实现类的方式实现新功能,有种热插拔的效果。而这些都可以通过接口和抽象类实现,也就是面向抽象编程。如图:当我们的java课程需要打折时,不需要直接修改java课程中的价格方法,而是通过打折类super.getPrice()调用父类方法实现。而能这样做的前提是,我们的getP原创 2021-01-31 17:27:40 · 561 阅读 · 2 评论 -
前置知识——UML部分基础知识
UML基础知识UML(Unified Modeling Language)统一建模语言。它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。目前主要包括13种图,这包括UML2.0在原有的基础上增加的4种。我们主要说一下六大关系:说明:关联是一种拥有关系,表示一个类知道另一个类的属性或方法。它用直线表示,当我们不特意强调实体间的关系时可以省略箭头(默认)。还比如老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但原创 2021-01-31 17:19:19 · 268 阅读 · 0 评论