
设计模式
文章平均质量分 84
西红柿系番茄
知其然,知其所以然。
展开
-
DDD随便整理
一、DPDomain Primitive:Domain Primitive是一个在特定领域里,拥有精准定义的、可自我验证的、拥有行为的Value Object。DP是一个传统意义上的Value Object,拥有Immutable的特性 DP是一个完整的概念整体,拥有精准定义 DP使用业务域中的原生语言 DP可以是业务域的最小组成部分、也可以构建复杂组合在DDD里,DP可以说是一切模型、方法、架构的基础,而就像Integer、String一样,DP又是无所不在的。可以带来的好处:接口的清原创 2021-05-16 17:10:37 · 1262 阅读 · 2 评论 -
责任链模式计算一个过去时间在xxx年/月/周/天/时/分/秒之前
有时候,需要计算一个过去时间在xxx年/月/周/天/时/分/秒之前。比如我们经常看到的文章评论时间、动态发表时间、代码提交时间等,如下怎么实现呢?逻辑是这样的:1、判断时间差是否超过1年,是的话直接计算xxx年前,否则往下走;2、判断时间差是否超过1个月,是的话直接计算xxx月前,否则往下走;3、判断时间差是否超过1个星期,是的话直接计算xxx周前,否则往下走;4、判断时间差是否超过1天,是的话直接计算xxx天前,否则往下走;5、判断时间差是否超过1小时,是的话直接计算xxx小时原创 2021-01-07 10:52:58 · 588 阅读 · 1 评论 -
简易小爬虫项目
最近疏于学习不知道写什么了,干脆就把去年跟同学打算做的一个招聘信息小程序半成品原创 2020-03-14 16:08:53 · 902 阅读 · 0 评论 -
静态工厂(简单工厂)模式
定义:将对象的创建过程交由专门的对象(工厂)去做,通过给工厂的方法传入不同的参数完成不同对象的创建,或者调用工厂的不同方法创建不同的对象。例子:有一个动物接口,两个类实现了该接口,一个是猫类,一个是狗类。有一个动物生产工厂,根据客户端传入不同的参数或者调用不同的方法返回不同的实现类对象。动物接口:有一个叫的方法/** * 动物 * @author z_hh * @time ...原创 2018-08-06 21:59:39 · 1910 阅读 · 0 评论 -
代理模式
有时候,我们不希望一个对象被外界直接访问,而是通过代理,从而来控制其中一些行为,这就是代理模式。比如,世界杯前夕,很多厂商想趁着这个四年一次的足球狂欢节来推销一波自己的产品,这个时候,找明星代言是最直接有效的方式。作为当今足坛最炙手可热的大球星,里奥·梅西自然成为了首选,无数厂商想找梅西商量合作的事情,为自己的产品做广告代言。但是,再不夺得大力神杯就没机会了的梅西,每天都拼命的训练,自然没有时...原创 2018-08-07 23:46:01 · 916 阅读 · 0 评论 -
工厂方法模式
定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。现在有一个工厂,提供了生产电脑的接口。/** * 工厂接口 * @author z_hh * @time 2018年10月27日 */public interface Factory { /** * 生产电脑 * @return 电脑接口 */ Computer ...原创 2018-10-27 11:24:19 · 211 阅读 · 0 评论 -
责任链模式
情景:晚上去上英语课,为了好开溜坐到了最后一排。哇,前面坐了好几个漂亮的MM。哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请往前传”,纸条就一个接一个的传上去了。糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!定义:在责任链模式中,很多对象由每一个对象对其下家的引用而接起来形成一条链。请求在这条链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个最...原创 2018-11-11 21:11:12 · 884 阅读 · 0 评论 -
设计模式的六大原则
1、单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。说明:单一职责原则遵循了高内聚低耦合的指导方针,一个类所作的事情应该是单一的,这样才能提高复用性和可维护性。举例:// TODO2、开闭原则(Open-Closed Principle, OCP)...原创 2018-12-21 14:29:09 · 170 阅读 · 0 评论 -
原型模式
定义:用于创建重复的对象,同时又能保证性能。当直接创建对象需要很大代价的时候,可以考虑使用该模式。在Java语言中,所有类的基类Object提供了clone()方法来提供克隆对象功能。但是,衍生类(子类)并不能直接使用它,否则,会报以下异常:如果我们要使用这个克隆功能,必须实现Cloneable接口,并重写 clone()方法。类图(针对Java):下面,我们举个例子说明...原创 2018-11-12 14:35:30 · 480 阅读 · 0 评论 -
享元模式
定义:尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。主要用于减少创建对象的数量,以减少内存占用和提高性能。类图:注意: 该模式不是所谓的共用一个对象(单例模式),比如Spring的ioc容器、应用的数据缓存等。而是重用具有某些相同属性的对象。案例:现在有一种类:猫,它有三个属性:颜色、颜值、运动量。有一个获取指定颜色的猫的工厂。这样,就可以定义一个容器,将猫存储起...原创 2018-11-12 22:46:33 · 239 阅读 · 0 评论 -
观察者模式(自定义观察者和可观察者的接口)
定义:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。类图:代码:定义可观察者(发布者)接口/** * 报社接口 * @author z_hh * @time 2018年7月23日 */public interface NewspaperOffice { /** * 用户注册 * @param o 读者 ...原创 2018-07-23 08:50:33 · 815 阅读 · 0 评论 -
状态模式(形式一)
定义:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。例子:糖果机,有多种状态以及多种行为,每种状态执行每种行为会得到不同的结果,并转向下一个不同的状态。使用原始的方法:在糖果机里面定义对应的状态(属性)以及行为(方法),然后在方法执行的时候,用if...else...判断当前状态,然后执行不同的逻辑代码。弊端:不易于扩展,当添加新的状态以及行为时,需要在糖果机里...原创 2018-07-22 23:53:00 · 518 阅读 · 0 评论 -
适配器模式
定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。案例:现在有一台MiniTV(微型电视机),需要110V电压的电流,但是只有220V电压的电池。这样,我们就可以定义一个变压器,将电池的电压降低,提供给TV使用。代码:电视机(需要110V的电压)/** * 电视机,需要110伏特的电流 * @author z_hh * @date...原创 2018-07-24 21:35:26 · 188 阅读 · 0 评论 -
门面模式(外观模式)
英雄联盟(俗称撸啊撸)中锐雯是玩家们非常喜欢的一位英雄,致使她如此受欢迎的原因不是因为其美貌和身材,而是因为拥有一套“光速QA”的连招,学会了不但能虐菜、上分,更重要的是还可以装逼。因此,学会“光速QA”成为了大家朝思暮想的目标。但是,这套操作非常复杂,具体玩法为:1.首先平a一下敌人;2.以最快的速度接q;3.以更快的速度点一下地板;4.以相当快的速度把鼠标甩回你要攻击的目标。如此循环3次。这对...原创 2018-07-25 21:15:29 · 565 阅读 · 0 评论 -
漫谈设计模式之间的联系与区别
一、工厂方法和抽象工厂P158敬请期待...二、装饰者和适配器联系:都是包装一个对象。区别:作用不同。装饰者让新的行为或责任加入类中,而无需修改现有的代码。适配器负责做接口的转换,允许客户使用新的库和子集合,无需改变任何代码。三、模板方法和策略联系:都是定义一些算法,它们有不同的实现,客户可以轻易使用不同的算法。区别:依赖程度不同。模板方法要定义一个算法的大纲,由它的子...原创 2018-07-25 23:26:56 · 524 阅读 · 0 评论 -
生成器模式
定义:将一个复杂对象的创建过程,封装到一个对象中(生成器),然后让客户端调用生成器按步骤构造对象。代码:public class Student { // id private Long id; // 姓名 private String name; // 性别 private Integer sex; // 手机号码 private String mobil...原创 2018-07-22 08:26:55 · 257 阅读 · 0 评论 -
策略模式
定义:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。代码:定义算法族(超类或接口及其若干实现类)public interface FlyBehavior { void fly();}public class FlyWithWings implements FlyBehavior { @Override public voi...原创 2018-07-22 09:17:47 · 217 阅读 · 0 评论 -
命令模式
定义:将请求封装成对象,这可以让你使用不同的请求、队列,或者日志请求来参数化其它对象。命令模式也可以支持撤销操作。案例一:将实现自定义接口的任务对象放进自定义执行器里面执行。1、定义任务接口:该接口为函数式接口(JDK8新特性,接口只有一个抽象方法,可使用Lambda表达式)。/** * 函数式接口 * @author z_hh * @time 2018年7月27日 */@...原创 2018-07-27 23:26:34 · 192 阅读 · 0 评论 -
模板方法模式
定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。OO原则:别找我,我会找你。代码:算法骨架类/** * 做饭步骤 * @author z_hh * @time 2018年7月22日 */public abstract class CookingStep { // 定义步骤,用fi...原创 2018-07-22 13:26:02 · 514 阅读 · 0 评论 -
装饰者模式
定义:动态地将责任附加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。代码:接口(面对接口编程,以便动态绑定)public interface Women { // 颜值 void faceScore(); // 气质 void qualities();}原始类/** * 定义原始对象 * @author z_hh * @time 2018年...原创 2018-07-22 15:29:41 · 165 阅读 · 0 评论 -
单例模式
定义:确保一个类只有一个实例,并提供全局访问点。代码:饿汉模式(公开域,存在内存消耗的小问题)public class Singleton1 implements Serializable { // 可供外部通过类名访问 public static final Singleton1 SINGLETON = new Singleton1(); // 防止外部创建对象 pr...原创 2018-07-22 16:24:10 · 479 阅读 · 0 评论 -
观察者模式(使用JDK内置的工具)
定义:观察者模式(也称发布者/订阅者模式),提供了对象之间的一种依赖关系,当被依赖者发生改变时,它的所有依赖者都会收到通知,并作出反应。jdk的util包提供了一个类Observable和一个接口Observer。Observable(被观察者/发布者):这个类代表一个可观察到的对象,或数据。它可以被细分为代表一个应用程序想要观察的对象。一个可观察的对象可以有一个或多个观察者。一个...原创 2018-07-23 23:59:42 · 754 阅读 · 0 评论