![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
不会程序的JAVA程序媛
I'm willing to do anything but ordinary
展开
-
设计模式之状态模式
状态模式实例APP抽奖活动问题请编写程序完成APP抽奖活动具体要求如下:假如每参加一次这个活动要扣除用户50积分,中奖概率是10%。奖品数量固定,抽完就不能再抽了。活动有四个状态:可以抽奖、不能抽奖、发放奖品和奖品领完。基本介绍状态模式(State Paterrn):它主要用来解决对象再多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应,状态之间跨域相互转换。当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类原理图说明Context原创 2020-10-26 23:39:15 · 102 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式需求:编写程序展示一个学校院系结构传统设计问题将学院看作学校的子类,系看作学院的子类,这样实际上是站在组织大小来进行分层次的这样不能很好实现遍历的操作基本介绍迭代器模式是常用的设计模式,属于行为性设计模式。如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式。原理类图Iterator:迭代器接口,是系统提供,含有hasNext,n原创 2020-10-25 19:58:05 · 116 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式豆浆制作问题编写制作豆浆的程序,说明如下制作豆浆的流程:选材-》浸泡-》放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种不同口味的豆浆都是一样的。基本介绍模板方法模式(Template Method Pattern)又叫模板模式,在一个抽象类公开定义了执行它的方法的模板。它的子类可以按照需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说,模板方式模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得原创 2020-10-25 14:31:55 · 135 阅读 · 0 评论 -
设计模式之代理模式
代理模式基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过dialing对象访问目标对象。这样做的目的是:可以在目标对象实现的基础上增加额外的功能操作,即扩展目标对象的功能。被代理对象可以是远程对象、创建开销大的对象或需要安全控制的对象。代理模式有不同的形式,主要有三种静态代理、动态代理(JDK代理、接口代理)和Cglib代理(可以在内存动态地创建对象,而不需要实现接口,他是属于动态代理的范畴)。代理模式示意图静态代理基本介绍静态代理在使用时,需要定义接口或者父类原创 2020-10-23 23:08:00 · 89 阅读 · 0 评论 -
设计模式之享元模式
享元模式例子:展示网站项目给客户A做一个产品展示网站,要求:有客户要求以新闻的形式发布有客户要求以博客的形式发布有客户希望以微信公众号的形式发布传统方案解决网站展示项目直接复制粘贴一份,然后根据客户不同的要求,进行定制修改给每个网站租用一个空间方案设计如图传统方案分析需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同的网站的实例对象很多,造成服务器浪费解决思路:整合到一个网站中,共享相关的代码和数据,对于硬盘,内存,CPU,数据库原创 2020-10-22 15:09:23 · 92 阅读 · 0 评论 -
设计模式之组合模式
组合模式例子:学校院系展示编写程序展示学校院系结构:要展示学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方案传统方案存在的问题将学院看作是学校的子类,系是学院的子类,这样实际上是站在组织大小的角度分层次的实际上我们的要求是:在一个页面展示出学校的院系组成,一个学校有多个学院,一个学院有多个系,因此这种方案不能很好实现管理的操作,比如对学院、系的添加。解决方案:把学校、院、系都看作是组织结构,他们之间没有继承关系,而是一个树形的结构,可以更好实现管理操作。=》组合模式。组合模原创 2020-10-21 13:52:06 · 123 阅读 · 0 评论 -
设计模式之装饰者模式
装饰者模式星巴克咖啡订单项目咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、shortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性。使用OO的来计算不同种类咖啡的费用:客户可以点单品咖啡,也可以单品咖啡 + 调料组合传统方案[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDg2a8mY-1603253622697)(E:\CodingLea原创 2020-10-21 12:14:08 · 117 阅读 · 0 评论 -
设计模式之 桥接模式
桥接模式实例手机操作问题:现在对手机类型的不同品牌实现操作编程(比如:开机,关机,上网,打电话等)。如图传统方法解决分析扩展性问题(类操作):如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机的品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码的围护成本。解决方案-使用桥接模式。基本介绍桥接(Bridge)模式是指,将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。原创 2020-10-16 16:02:08 · 119 阅读 · 0 评论 -
设计模式之适配器模式
适配器设计模式生活中适配器的例子某些手机的耳机口是type-c的接口,但大部分耳机都是圆孔的插头。那么我们可以买一个转接口(适配器)就可以在type-c的接口上使用圆孔耳机啦基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能在一起工作的两个类可以协调工作。其别名包装器(Wrapper)适配器模式属于结构型模式主要分三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式将一个类的接口原创 2020-10-15 22:21:00 · 133 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式盖房问题需要建造房子,这一过程为打桩,砌墙,封顶房子有各种各样的,比如普通房、高楼、别墅,各种房子的过程虽然一样,但是要求不一样传统方法解决盖房要求思路分析(图解)代码public abstract class AbstractHouse { //打地基 public abstract void buildBasic(); //砌墙 public abstract void buildWalls(); //封顶 public abstract void roof原创 2020-10-15 15:16:00 · 108 阅读 · 0 评论 -
设计模式之原型模式
原型模式问题:克隆羊问题(创建多只一模一样的羊)1. 传统方法public class Sheep { private String name; private int age; private String color; public Sheep(String name, int age, String color) { super(); this.name = name; this.age = age; this.color = color; } public Stri原创 2020-10-14 13:42:47 · 152 阅读 · 0 评论 -
工厂模式之简单工厂模式、方法工厂模式、抽象工厂模式
简单工厂模式传统方式/** * @Author: Antares * @Date: 2020/2/22 14:15 */public abstract class Pizza { protected String name; /** * 原材料准备 */ public abstract void prepare(); public void bake() { System.out.println(name + "bakin原创 2020-10-13 19:28:54 · 93 阅读 · 0 评论 -
单例模式的八种实现方式
单例模式饿汉式(静态常量)/** * @Author: Antares * @Date: 2020/2/21 22:22 */public class Single01 { public static void main(String[] args) { SingleTon instance01 = SingleTon.getInstance(); SingleTon instance02 = SingleTon.getInstance();原创 2020-10-13 19:22:37 · 159 阅读 · 2 评论