设计模式
Starry-
加油呗
展开
-
设计模式之观察者模式
1.引子高中上学最怕的就是班主任默默的站在窗外,我们猛然看见那双恐怖的眼睛狠狠的盯着自己,现在想想都有些后怕,这里面就包含着观察者模式。下面让我们分析一下:xiaoMing和xiaoLi上课看视频被上课老师抓住了,老师要求他们认真听讲。这里老师是观察者对象,xiaoMing和xiaoLi是观察对象;用代码实现就是:1.1 普通版老师A:public class TeacherA { p...原创 2018-11-29 23:29:14 · 331 阅读 · 4 评论 -
设计模式之备忘录模式
1 引子对于我们而言,时常反悔是常有的事情,程序中也经常出现此类情况。为了使程序反悔,即恢复到对象的某一状态,前辈总结出一个设计模式,称之为备忘录模式。备忘录模式的关键在于利用备忘类记录对象的某些或者全部状态,然后在需要的地方恢复对象的状态。备忘录模式实现的方式需要保证被保存的状态不能被对象从外部访问,目的是为了保护被保存的对象状态的完整性以及内部实现不向外暴露。备忘录模式原理代码:需要保存...原创 2018-12-25 21:29:53 · 171 阅读 · 0 评论 -
设计模式之原型模式
1 引子在实际项目中,有时候会复制对象,具体可看下方代码。可克隆的Person类:public class Person implements Cloneable { private String name; private int age; private String sex; public Person(String name, int age, String sex){...原创 2019-01-10 21:34:46 · 189 阅读 · 0 评论 -
设计模式之装饰模式
1 引子大家都喝过奶茶,我们知道奶茶可以根据自己的喜好来加一些配料,如珍珠、糖、红豆等使得奶茶更好喝。在这可以简单方式实现上述过程:奶茶类MilkyTea:可以加各种配料组合成一杯可口的奶茶public class MilkyTea { public MilkyTea(){ System.out.println("只有奶茶,什么也没加..."); } public void ...原创 2019-01-18 00:49:06 · 341 阅读 · 0 评论 -
设计模式之代理模式
1 静态代理有些时候,我们想做一些事但是自己没有资源或者自己做不好,就会想着花点钱请专业的人帮我们做。这是一种代理模式。比如我们要买车,都会去4S店,让他们帮我们办理繁琐的手续。抽象成代码如下:买车的行为抽象成接口Something:public interface Something { void buyCar();}买车的人Person类:public class Person...原创 2019-01-19 10:44:12 · 730 阅读 · 0 评论 -
设计模式之建造者模式
1 引子通常我们构造一个人的对象,都是通过new关键字来的如new Person();如果还要赋予人的性别,年龄,身高,体重等属性,一般都是通过get/set或者构造函数来实现,如public class Person { private String sex; private int age; private String height; public Person(Str...原创 2019-01-08 20:40:56 · 221 阅读 · 0 评论 -
设计模式之桥接模式
1 引子我们都知道,士兵根据作战性质可以分很多种,比如步兵、骑兵和弓箭手等;又会根据个人的资质不同,会将其分会不同的等级,这里可简单理解为等级A、等级B和等级C。所以此处三种士兵,分别有三个等级,应该共有9个实体类。大概的逻辑图如图所示:上图很明显,反应出多层继承的问题。①抽象士兵-步兵/骑兵/弓箭手:根据作战性质进行划分;②步兵/骑兵/弓箭手-A等/ B等/C等:根据个人资质进行划分;...原创 2019-01-24 21:08:00 · 1616 阅读 · 2 评论 -
设计模式之组合模式
1 引用大型企业都会有总部直属部门和分公司,分公司则又会有各自的小部门;这里,小部门组成了分公司,分公司和直属部门组成总公司,当总公司下发通知的时候,需要经过每一个分公司到达各子部门。这种结构类似于树形结构:要想用代码实现上述发送通知的功能,一般思路会有点复杂 ,需要构建总部直属部门的类、分公司类以及分公司子部门的类,在代码结构中,这样显得非常冗余,而且一旦改变或者新增一个大区,则会增加修改...原创 2019-01-25 22:42:43 · 1375 阅读 · 0 评论 -
设计模式之外观模式
1 引子想必大家都被医院繁琐的流程折腾着,去医院看病,不仅要排队,还要经历挂号、看诊、缴费、拿药等繁杂的流程;特别对于来到不熟悉医院的病人来讲,这简直就是折磨。我们暂且把以上流程抽象建模,用面向对象的思想构建类。挂号窗口类:/** * 挂号部门 */public class RegisterDepart { Patient patient; public RegisterDepar...原创 2019-01-21 20:46:47 · 237 阅读 · 0 评论 -
设计模式之解释器模式
1 引子今天介绍设计模式系列的最后一种-解释器设计模式。在了解解释器模式原理后,感觉实际落地的场景非常少,因为它适用于类似API的场景,即定义一种语法规则,同时定义一套基于语法规则的解释器。这里,参考前辈的例子,用计算后缀表达式的值来说明解释器模式。首先看一下例子的UML图:类图中,接口Expression含有抽象方法interpret(),意为解释执行。其他所有的类实现这个接口,这里称实...原创 2019-02-01 19:21:25 · 278 阅读 · 1 评论 -
设计模式之享元模式
1 引子黑白五子棋或者围棋只有两种颜色-黑白,如果我们把棋子作为一个抽象类Chess,黑棋BlackChess和白棋WhiteChess分别作为继承抽象类的具体类,那么每下一步都需要new一个新的棋子对象,如此下来会产生大量的黑白棋对象。仔细观察黑白棋,不难发现黑白棋对象其实都一样,唯一不同的是其位置的变化。那么是否有一种方法可以实现这样的效果:不用创建大量的黑白棋对象,但是也能准确的实现其位置...原创 2019-01-28 16:47:21 · 2397 阅读 · 2 评论 -
设计模式之抽象工厂模式
1 引子上篇讲到,为了实现类的“开闭原则”和“单一职责原则”,把简单工厂模式改为工厂方法模式。通过工厂方法模式,客户只需要从对应的工厂拿到想要的衣服,从短袖工厂拿到短袖,毛衣工厂拿到毛衣,衬衣工厂拿到衬衣;但是,我们除了上衣外,还需要裤子;在这里客户需要按照不同的季节来拿衣服(包括上衣和裤子)。面向对象的抽象过程就是:①抽象工厂接口IFactory,可以生产上衣和裤子;②实体工厂类SpringF...原创 2019-01-04 22:26:17 · 277 阅读 · 0 评论 -
设计模式之单例模式
1 引子单例模式是指某个类有唯一的实例。最常见的获取单例的方法有两种:饿汉式和懒汉式。懒汉式单例模式:public class Single1 { private static Single1 single1; private Single1(){} public static Single1 getInstance(){ if (single1 == n...原创 2018-12-30 22:38:21 · 717 阅读 · 1 评论 -
设计模式之命令模式
1.引子晚上下班都有吃宵夜的习惯,路过烧烤摊不禁想撸一串。这里用代码表示就是:烧烤摊摊主:public class Barbecuer { public void roastChickenWings(int num) { System.out.print( num + "串烤鸡翅..."); } public void roastChickenLeg(int num) {...原创 2018-12-05 00:11:42 · 232 阅读 · 0 评论 -
设计模式之策略模式
1.策略模式的理解策略模式从字面来理解就是有多种策略可以选择,这里涉及到策略以及做出选择的主体;既然是多种策略,那么抽象出来一个行为就是一个方法,这个方法可以放到抽象类或者接口里,方法供不同的环境实现不同的策略,这里又涉及到一个抽象类或者接口以及调用不同策略的环境。术语解释就是:策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相互替代,使算法本身和使用算法的客户端分割开来,相...原创 2018-11-28 00:13:54 · 208 阅读 · 0 评论 -
设计模式之迭代模式
1.引子假如部门十个人组织一次秋游,由于人数较少所以计划集合后集体坐公交前往目的地。当日从起始站来了一辆空公交车,小伙伴上车坐好后,票务员来到每个人的身边开始收车票。这一个简单的场景就包含迭代模式。场景内涉及到公交车、十个人的小集体还有票务员(司机看做公交车的一部分吧)。可以把场景抽象一下:①公交车是一个聚集类(可容纳十个人的小集体还有一名票务员);②十个人的小集体可以认为是一个长度为十的...原创 2018-12-01 16:26:22 · 2526 阅读 · 0 评论 -
设计模式之模板模式
1. 背景项目中经常出现这么一种情况:不同的业务类型需要完成一系列的操作,而这一系列操作(方法)有部分重叠代码。为了减少代码的重复,一般都会把重复代码提到公共类中或者父类中,与业务无关的操作(方法)可提到公共类中,而与实际业务结合紧密的操作(方法)则提到父类中;另外,对于同一个操作不同业务类型实现不一样,则可以在父类中定义抽象方法,把实现延迟到子类中。其实,这就是一种简单的模板设计模式。2. ...原创 2018-11-28 19:46:37 · 269 阅读 · 0 评论 -
设计模式之状态模式
1. 引子我们人一生大概可以分为孩童时期、青年时期、中年时期以及老年;而我们在不同的时期经历的事情不一样,得到的感受也不一样。比如孩童时期跟小伙伴们一起快乐玩耍,青年都在校园中度过,中年则要承担家庭的责任承担工作的压力,老年则享受晚年的幸福。用代码表示就是:public class Client { // 人生中不同的时期 private String state; void setSt...原创 2018-12-07 23:19:19 · 172 阅读 · 0 评论 -
设计模式之责任链模式
1.引子我们经常会去银行取钱,如果金额达到一定的数量则需要提前预约,否则无法立马提现。假设有这么一个流程,提现金额小于等于10万则可以直接在柜台提取;提现金额大于10万小于等于20万则需要事先跟银行的客户经理预约然后才可以提取;提现金额大于20万的则需要事先预约并经银行经理授权后才能提取。这个例子就包含着责任链模式。抽象出来就是:金额小于等于10万则直接在柜员处提取;否则如果金额小于等于20...原创 2018-12-03 21:57:32 · 231 阅读 · 0 评论 -
设计模式之中介者模式
1 引子生活在这个世界,无法避免一件事,那就是借钱。现实中有这么个场景:xiaoLi找xiaoMing借钱,xiaoli口袋中的钱增加了,但是xiaoMing口袋里的钱变少了,这是一个紧密联系的过程。可以抽象成下面的代码:抽象类Person:public abstract class Person { protected int money; public void setMoney(i...原创 2018-12-26 21:21:11 · 170 阅读 · 0 评论 -
设计模式之访问者模式
1. 引子在状态模式中,我们说到人可以分为孩童、青年、中年和老年时期,这都是人的一个状态。状态本来可以作为人的成员变量,作为参数传入方法表达不同时期得到的不一样的感受;但这种方式耦合高(表现在新加状态),我们可以把状态抽象出来作为一个单独的接口或者抽象类,不同的时期(孩童、青年、中年、老年)表示为继承抽象类或者实现接口的实体类,然后通过面向接口编程注入到人这个类里面,这样人的实体bean就可以根...原创 2018-12-21 23:40:44 · 173 阅读 · 0 评论 -
设计模式之工厂方法模式
1 引子记得小时候,夏天的短袖和衬衫基本都是妈妈买几块布自己裁剪,然后缝缝就成了喜欢的衣服,冬天的毛衣也是妈妈一针一针织起来,可见那个时代的淳朴。我们用面向对象的思想看待这个过程,就是妈妈是一个类,主要用来生产毛衣(方法)。短袖、衬衫和毛衣可以分别抽象成三个类。具体如下:手工制作衣服public class Mother { public static void main(String[]...原创 2019-01-03 22:39:12 · 284 阅读 · 0 评论 -
设计模式之适配器模式
1 引子当项目中现有的类不太符合要求时,或许会修改类及方法;但是当项目紧急,等着上线就没有那么多时间让我们review了,这个时候该怎么办呢?别着急,或许适配器模式可以帮我们解决这个问题。适配器模式的原型代码为:现有的类Adaptee:public class Adaptee { protected void specialMethod(){ System.out.println("...原创 2018-12-30 11:12:43 · 236 阅读 · 0 评论 -
二十三种设计模式总结
1 感想设计模式大概花了两个月的时间来整理,说实话12月份写的现在已经忘记的差不多了,究其原因只是了解原理并没有落地使用,所以要想真正的掌握需要自己有意识的在项目中使用,这也是很多公司面试的要求。在前期一直没有一个写作思路,不知道如何来写才能让自己或者别人更好的理解,网上也有很多大神写的关于设计模式系列的文章,各种写作思路的都有;通过借鉴前辈们的写作思路,结合自己的思考,认为设计模式是诸多场景...原创 2019-01-29 10:15:51 · 490 阅读 · 2 评论