大话设计模式

大话设计模式之观察者模式

☆樱花仙子☆ 提交于 2020-04-04 09:46:56
1:类图的实现 2:观察者模式的分析   针对,上面的类图我们详细讲解一下观察者模式的概念:观察者模式是一种一对多的依赖关系,让多个观察者对象能够监听同一个对象,只要该对象发生变化后,所有观察者都可以知道,使观察者能够更新自己的状态。   Subject类:该类型为通知者,把所有观察者都装进自己的内部的容器里,这个容器可以有一定数量的观察者,允许一定的删除和添加,该通知者发生变化时,Subject类型中有notifly方法来同时观察者。   Observer类:该类为观察者,即每一个需要被通知者通知的对象都要实现该方法,同时实现接口里的Update方法,供Subject通知类使用来通知观察者。 3:代码实现 package observerPattern; /** * @author :dazhu * @date :Created in 2020/4/4 7:49 * @description: * @modified By: * @version: $ */ public class Main { public static void main(String[]args){ Observer o1 = new Observer1("张三"); Observer o2 = new Observer2("李四"); Observer o3 = new Observer2("王二");

大话设计模式

十年热恋 提交于 2020-03-06 16:37:46
根据设计模式的参考书 中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns) 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用新的运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 工厂模式:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 建造者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 适配器模式

大话设计模式之备忘录模式

百般思念 提交于 2020-02-22 21:02:23
备忘录模式   在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 涉及到的角色描述    originator(发起人): 负责创建一个备忘录memento,用来记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。originator可根据需要决定memento存储它的哪些内部状态    memento(备忘录): 负责存储originator的内部状态,并可防止originator以外的其他对象访问备忘录memento。备忘录有两个接口,caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。originator能够看到一个宽接口,允许它访问返回先前状态所需的所有数据。    caretaker(管理者): 负责保存好备忘录memento,不能对备忘录的内容进行操作或检查。 优点:   1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。   2、实现了信息的封装,使得用户不需要关心状态的保存细节。 缺点:   消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。 使用场景:   1、需要保存/恢复数据的相关状态场景。   2、提供一个可回滚的操作。 具体代码实现   创建备忘录 package com.chenpt

大话设计模式之简单工厂模式

感情迁移 提交于 2020-02-17 18:27:00
面向对象:封装、继承、多态,使得程序的耦合度降低,代码可以复用。 业务的封装:让业务逻辑与界面逻辑分开,耦合度降低。 简单的计算器程序 1)封装和继承 //定义一个Operation类 public class Operation { //操作数 private double NumberA {get;set;} private double NumberB {get;set;} private virtual double GetResult() { double result =0; return result; } } //定义+、-、*、/操作方法 public class OperationAdd:Operation { public override double GetResult() { double result =0; result = NumberA + NumberB; return result; } } public class OperationSub:Operation { public override double GetResult() { double result =0; result = NumberA - NumberB; return result; } } public class OperationMul:Operation {

《大话设计模式》——工厂方法模式(Python版)

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-06 00:42:58
工厂方法模式 :定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 介绍 工厂方法模式 ,又称 工厂模式 、 多态工厂模式 和 虚拟构造器模式 ,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 对比简单工厂模式 是对简单工厂模式的一个延伸 ,所以它们诞生的背景以及所解决的问题是大同小异。(不了解简单工厂模式的请看 《大话设计模式》——简单工厂模式 ) 简单工厂模式 简单来说,简单工厂模式是由一个工厂对象 根据不同参数创建不同的实例 。具体传什么参数,创建什么实例的逻辑是在工厂对象中完成的。 优点 : 只需要传入一个正确的参数,就可以获取你所需要的对象而无需知道其创建细节。 缺点 : 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了 开放—封闭原则 ; 如果产品实例种类很多,也导致了工厂内部逻辑复杂,不易维护。 工厂方法模式 工厂方法模式是对简单工厂模式进一步的解耦。将把原本会因为业务代码而庞大的简单工厂类, 拆分成了一个个的工厂类 ,这样代码就不会都耦合在同一个类里了。 优点 : 用户只需要关心所需产品的对应工厂,无需关心细节 加入新产品符合开闭原则, 提高可扩展性 进一步降低了程序的 耦合性 缺点 : 类的个数容易过多,增加复杂度 增加了系统的抽象性和理解难度 详细介绍 工厂方法模式的四个要素: 抽象产品类 (Product)

《大话设计模式》——工厂方法模式

帅比萌擦擦* 提交于 2020-02-05 18:39:04
工厂方法模式 :定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 介绍 工厂方法模式 ,又称 工厂模式 、 多态工厂模式 和 虚拟构造器模式 ,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。 对比简单工厂模式 是对简单工厂模式的一个延伸 ,所以它们诞生的背景以及所解决的问题是大同小异。(不了解简单工厂模式的请看 《大话设计模式》——简单工厂模式 ) 简单工厂模式 简单来说,简单工厂模式是由一个工厂对象 根据不同参数创建不同的实例 。具体传什么参数,创建什么实例的逻辑是在工厂对象中完成的。 优点 : 只需要传入一个正确的参数,就可以获取你所需要的对象而无需知道其创建细节。 缺点 : 工厂一旦需要生产新产品就需要修改工厂类的方法逻辑,违背了 开放—封闭原则 ; 如果产品实例种类很多,也导致了工厂内部逻辑复杂,不易维护。 工厂方法模式 工厂方法模式是对简单工厂模式进一步的解耦。将把原本会因为业务代码而庞大的简单工厂类, 拆分成了一个个的工厂类 ,这样代码就不会都耦合在同一个类里了。 优点 : 用户只需要关心所需产品的对应工厂,无需关心细节 加入新产品符合开闭原则, 提高可扩展性 进一步降低了程序的 耦合性 缺点 : 类的个数容易过多,增加复杂度 增加了系统的抽象性和理解难度 详细介绍 工厂方法模式的四个要素: 抽象产品类 (Product)

《大话设计模式》策略模式

旧城冷巷雨未停 提交于 2020-02-03 07:34:05
策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法, 减少了各种算法类与使用算法类之间的耦合 [DPE]。 策略模式就是用来 封装算法 的,可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性[DPE]。 策略模式的Strategy 类层次为Context定义了一系列的可供重用的算法或行为,继承有助于析取 出这些算法中的公共功能[DP]。 此模式让算法的变化,不会影响到使用算法的客户。 客户端需声明一个Context类,创建Strategy实例来初始化Strategy变量,由ContextInterface调用Strategy的AlgorithmInterface()。 与简单工厂模式结合时 ,只需识别Context类,并传入一定的参数,在Context内部根据参数来实例化不同的Strategy类,而后调用其算法实现AlgorithmInterface(),这种做法使得 耦合更加降低 。 来源: CSDN 作者: Arururururu 链接: https://blog.csdn.net/unirrrrr/article/details/104147586

大话设计模式之建造者模式

孤街浪徒 提交于 2020-01-26 06:54:18
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u010850027/article/details/24629581 盘古开辟了天地。用身躯造出日月星辰、山川草木。那残留在天地间的浊气慢慢化作虫鱼鸟兽,为这寂静的世界增添了生气。这时,有一位女神女娲,在这莽莽的原野上行走。 她放眼四望。山岭起伏,江河奔流,丛林茂密,草木争辉,天上百鸟飞鸣,地上群兽奔驰,水中鱼儿嬉戏,草中虫之豸跳跃,这世界按说也点缀得相当漂亮了。可是她总认为有一种说不出的寂寞。越看越烦,孤寂感越来越强烈,连自己也弄不清楚这是为什么。与山川草木诉说心中的烦躁,山川草木根本不懂她的话;对虫鱼鸟兽倾吐心事,虫鱼鸟兽哪能了解她的苦恼。 她颓然坐在一个池塘旁边,茫然对池塘中自己的影子。 忽然一片树叶飘落池中,精巧的池水泛起了小小的涟漪,使她的影子也微微晃动起来。 她突然认为心头的结解开了,是呀!为什么她会有那种说不出的孤寂感?原来是世界是缺少一种像她一样的生物。想到这儿,她立即用手在池边挖了些泥土。和上水。照着自己的影子捏了起来。捏着捏着,捏成了一个小小的东西,模样与女娲几乎相同,也有五官七窍,双手两脚。捏好后往地上一放。竟然活了起来。 女娲一见,满心欢喜,接着又捏了很多。 她把这些小东西叫作“人”。 今天我们的大话设计就从女娲抟土造人的故事開始说起,女娲要建造一个人

大话设计模式,结构型模式之装饰器模式

邮差的信 提交于 2020-01-19 22:27:43
结构型模式概述 结构型模式概述 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。 模式动机及定义 模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。 关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)。 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰模式的模式动机。 模式定义 装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活

大话设计模式之迭代器模式

假装没事ソ 提交于 2020-01-12 20:49:24
迭代器模式   提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露对象的内部表示。 迭代器模式的角色构成 (1)迭代器角色(Iterator):定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext()),移出当前对象的方法remove(), (2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。 (3)容器角色(Aggregate): 一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等 (4)具体容器角色(ConcreteAggregate):就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。 模拟迭代器实现 创建迭代器角色 /** * @Author: chen * @Description: 定义抽象迭代器 * @Date: created in 2018/8/20 * @Modified By: */ public interface MyIterator { Boolean hasNext(); Object next(); }   自定一个聚集类; 在聚集类内部