java设计模式
gcc_front
兜兜转转,工作之余,把学得的东西共享下
展开
-
简单理解常用设计模式(一)简单工厂-附加UML解释
记得去年看了一遍大话设计模式,很有感触,现在再看第二遍,又收获良多,这里记录一下自己的理解。注:语言为java一、简单工程模式根据套路来,假如面试官让你设计一个计算器,你会怎么写代码,能加减乘除即可,自己写一套再往下看吧。新嫩一般就是直接开干,这点我也是,也很喜欢能立马动手这种精神,但结果往往不太理想。于是代码结果可能就是在一个类里,一个main方法解决问题。然后仔细想想?哦,耦合太高了,得解耦,...原创 2018-03-02 15:06:25 · 359 阅读 · 0 评论 -
简单理解常用设计模式(十一)适配器模式(例如姚明叫人翻译英文)
这里记录下适配器模式。适配器模式:将一个类的接口转换成客户希望的另外一个类的接口定义有点绕,笔者只看定义也理解不了。今次更换一下说明方式。现有NBA运动员接口如下:package com.gcc.adapterModel; public interface Player { void attack(); void defense(); } 有NBA前锋类和后卫类如下:package c...原创 2018-03-06 14:41:52 · 484 阅读 · 0 评论 -
简单理解常用设计模式(十)观察者模式
这里记录一下观察者模式,偶尔会用到,也比较好理解。观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,在主题对象改变时会同时通知所有注册的观察者对象,使它们能够自动更新自己。采用原书场景:办公室员工为观察者,所有人都约定(订阅)了前台小姐姐,如果老板回来就通知他们,他们收起小差继续工作。你会怎么写代码,是就前台类,员工类吗?原书UML如下:这里对员工和通知者(前台,或者老...原创 2018-03-06 13:56:06 · 151 阅读 · 0 评论 -
简单理解常用设计模式(九)建造者模式(例如通过第三者生成人物)
这里记录一个比较常用的模式,建造者模式,主要是应用于:当创建复杂对象的算法应该独立于该对象的组成部分,以及它们的装配方式时适用。建造者模式:将一个复杂对象的构建,于它的表示分离,使得同样的构建过程可以创建不同的表示。这里应用原书的场景,调用方生成一个人物形象,不应该让调用方来决定每个细节,比如胖身体,大头等,应该给调用方提供一个整体方案如胖子人物,瘦子人物。原书UML如下:调用类如下:packag...原创 2018-03-06 11:08:23 · 182 阅读 · 0 评论 -
简单理解常用设计模式(八)外观模式(例如客户、基金、用户)
这里再记录一个易于理解也非常常用的模式,外观模式。外观模式:为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更容易使用。这里以原书的场景为例,即投资人(有闲钱的普通老百姓),想要投资某股票,某国债,某房产,但实际情况他不应该直接和这些金融产物接触,因为投资人并不了解全部的金融产品,于是投资人选择基金,由基金负责人来代替投资人和金融产物打交道,以稳定获利。原书U...原创 2018-03-06 10:29:12 · 402 阅读 · 0 评论 -
简单理解常用设计模式(七)模板方法模式(抽取公共的)
这是一个通俗易懂的模式,在笔者学习代码重构的时候经常会用类似的方式提炼代码。模板方法:定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即能重定义算法的某些步骤。原书UML如下:原书demo如下:TestPaper类主要内容如下:子类如下:调用类如下:原书demo是c++,不过和java很相似,语义可以理解。这里根据案例解释下模板方法的定义:算法骨架,即Tes...原创 2018-03-05 17:06:53 · 1201 阅读 · 0 评论 -
简单理解常用设计模式(六)工厂模式
这里说说工厂模式,其实在笔者写完(三)常用设计原则时,部分读者已经发现简单工厂的不妥了,因为在简单工厂模式下,新增功能需要添加新功能类,并且要修改工厂类的case判断,这样就违反了开闭原则:可以拓展但不能修改源码。当然开闭原则不是绝对的,也可以根据实际开发场景来决定是不是遵循,但绝大多数情况下请遵循。这里比较简单工厂模式和工厂模式的区别:简单工厂模式的优点在于工厂类中包含了必要的逻辑判断,根据用户...原创 2018-03-05 16:28:58 · 202 阅读 · 0 评论 -
简单理解常用设计模式(五)代理模式
代理模式:为其他对象提供一种代理,以控制对这个对象的访问这里说明代理模式,这是一个平常开发自己不太会用到,但实际作用不小的模式。以原书送礼物为场景:人物a要给人物b送礼物,但又不想让人物b知道是自己送的,所以找来了人物c来代替自己送礼物。UML如下:调用类如下:package com.gcc.proxyModel; /** * 代理模式 * */ public class TestProxy...原创 2018-03-05 15:01:31 · 148 阅读 · 0 评论 -
简单理解常用设计模式(四)装饰模式
下面说一个笔者理解了蛮久的模式,笔者基础仅一般,所以理解有些慢。各位如果和笔者相似,请debug代码一步步刨开理解。现在有这样一个场景,类似qq秀(女生的话理解成暖暖,嘿嘿),用来换装穿衣,文字显示即可,简单代码实现,怎么做呢?学生党并且基础不好的可能是这样:写一个persion类,属性包括姓名,方法有穿衣服,穿裤子,穿鞋子,方法实现就是打印这几个字,然后show方法用来打印人名,最后在main方...原创 2018-03-05 14:06:56 · 207 阅读 · 0 评论 -
简单理解常用设计模式(三)常用设计原则
1:单一职责原则:就一个类而言,应该只有一个引起它变化的原因;若职责(功能)太多,等于耦合了各种功能,假如要修改其中一种,很大可能会导致其它功能的变化甚至破坏。2:开放-封闭原则:对于代码实体(类,模块,函数等)应该可以拓展,但不能修改;开闭原则的好处是,在实际开发中,需求会多次改变但程序还是会相对稳定,从而使第一个版本后可以不断推出新版本。3:依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象,...原创 2018-03-05 09:46:15 · 206 阅读 · 0 评论 -
简单理解常用设计模式(二)策略模式
写完简单工厂模式后,这里说说策略模式,厉害的观众已经发现了,简单工厂在有些场景非常不合适,例如市场营销的场景,商场打八折,打五折,满五百减一百,满两百减五十,不打折等。市场经常会变动这些策略,如果是简单工厂就需要每次都改动工厂类,用来添加新的策略,然后添加具体的实现类。这样每次变动都要修改项目,二次开发工作量很大,非常的不理想。所以仔细思考。每加一个策略,都加一个类,这样做好吗,面向对象不是类越多...原创 2018-03-02 18:41:51 · 324 阅读 · 0 评论 -
简单理解常用设计模式(十二)单例模式
这里记录下经常会遇到,面试也经常会被问的单例模式。单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点见如下代码,说明在代码注释内已经很清楚了:package com.gcc.singletonModel; /** * 懒汉式单例(调用静态方法才实例化) * 只适合单线程 * 多线程存在问题如: * 当两个线程同时运行到判断instance是否为空的if语句,并且instance...原创 2018-03-06 15:19:23 · 118 阅读 · 0 评论