# design-patterns-java **Repository Path**: caoIoT/design-patterns-java ## Basic Information - **Project Name**: design-patterns-java - **Description**: Java设计模式 1、添加装饰模式 2、添加策略模式 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-05-19 - **Last Updated**: 2024-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1.设计模式 ## 策略模式(Strategy) ### 场景(报价系统(不同规则不同的策略),)(不同的会员打折力度不一样)
需求: 1. 对普通客户或者新客户报全价 2. 对老客户报的价格,统一折扣5% 3. 对大客户报的价,统一折扣10%
场景: 1. 多个if-else 可以考虑使用策略模式 2.### 实现比较(if-elseif、策略模式)
if-elseif:(平等的功能结构) 优点: 1. 结构简单明了 2. 适合简单的策略判断 缺点: 1. 违反开-闭原则 2. 当策略多的时候,维护非常麻烦 策略模式:(策略算法是相同行为的不同实现) 优点: 1. 各个策略算法的平等性,正式平等性才会使得算法之间可以相互的替换。 2. 所有算法的实现都是相互独立,之间没有任何依赖### 模型概述
1. 概述:(算法、封装、相互替换、独立变化) 定义一系列算法,将他们都分别封装,并且使他们可以相互替换。 本模式使算法可以独立于使用它的客户而变化。 2. 功能: 将算法和具体的业务分离 3. 核心: 不是如何实现算法:而是如何组织、调用这些算法。 4. 目的: 让程序结构更加灵活、具有更好的维护性和扩展性。 5. 策略算法的选择: 1.客户端选择->传递给上下问对象 2.客户端不负责算法选择,而实让上下文选择具体(如容错恢复) 6. Strategy实现: 1.可以是接口(常见方式) 2.可以是抽象类(多个算法有公共的自定义功能) 7. 特点: 1.运行时策略算法的唯一性,即同一个时刻只允许一个算法使用### 示例demo1 模型参考包:com.patterns.java.strategy.demo1 策略模式-通用版(基于strategy的)参考包 :com.patterns.java.strategy.demo1.test 策略模式-扩展版(基于context的)参考包 :com.patterns.java.strategy.demo1.test1 策略模式-(服务降级:context 自动选择实现策略)参考包 :com.patterns.java.strategy.demo1.test2 ### 示例demo2 测试入口类:com.patterns.java.strategy.demo2.StrategyDemo 策略模板接口:com.patterns.java.strategy.demo2.Strategy 上下文封装策略:com.patterns.java.strategy.demo2.Context 加策略:com.patterns.java.strategy.demo2.AddOperation 减策略:com.patterns.java.strategy.demo2.SubtractOperation 乘策略:com.patterns.java.strategy.demo2.MultiplyOperation ## 策略模式 + 模板方法模式 ## 模板方法模式(Template Method)(公共算法提取--采用模板方法) ## 装饰模式(Decorator)(文本显示、图片显示;增加黑色边框或者滚动条,或者两个都加) ### 示例 : 显示接口:com.patterns.java.decorator.View 文本显示:com.patterns.java.decorator.TextView 图片显示:com.patterns.java.decorator.PictureView 黑色边框:com.patterns.java.decorator.ViewDecorator 滚动条:com.patterns.java.decorator.ScrollBarViewDecorator 显示装饰者:com.patterns.java.decorator.ViewDecorator 测试启动类:com.patterns.java.decorator.DecoratorPatternDemo ## 组合模式(Composite) ## 职责链模式(Chain of Responsibility) ## 工厂设计模式 ### 简单工厂 ### 工厂模式(Factory Method) ### 抽象工厂(Abstract Factory) ## 适配器模式(Adapter) ### 示例 入口类:com.patterns.java.adapter.AdapterDemo 媒体播放器:com.patterns.java.adapter.MediaPlayer 高级媒体播放器:com.patterns.java.adapter.AdvanceMediaPlayer 声音播放器:com.patterns.java.adapter.AudioPlayer MP4播放器:com.patterns.java.adapter.Mp4Player VLc播放器: com.patterns.java.adapter.VlcPlayer ## 代理模式(Proxy) ## 外观者模式(Observer) ## 迭代器模式(Iterator) ### 示例: 需求:对Name数组循环遍历 入口类:com.patterns.java.Iterator.IteratorDemo 迭代器模板接口:com.patterns.java.Iterator.Iterator 容器模板接口:com.patterns.java.Iterator.Container Name容器:com.patterns.java.Iterator.NameContainer Name迭代器实现类:com.patterns.java.Iterator.NameContainer.NameIterator ## 单例模式(Singleton) ## 状态模式(State) ## 桥接模式(Bridge) ### 示例: 入口类:com.patterns.java.bridge.BridgeDemo 形状类:com.patterns.java.bridge.Shape 圆形:com.patterns.java.bridge.Circle 桥接标准:com.patterns.java.bridge.Draw 绿色圆圈:com.patterns.java.bridge.GreenCircle 红色圆圈:com.patterns.java.bridge.RedCircle ## 访问者模式(Visitor) ## 外观模式 ### 示例: 入口类:com.patterns.java.facade.FacadeDemo 外观类:com.patterns.java.facade.ShapeMaker 形状标准接口:com.patterns.java.facade.Shape 圈:com.patterns.java.facade.Circle 长方形:com.patterns.java.facade.Rectangle 正方形:com.patterns.java.facade.Square ## 生成器模式(Builder) ## 原型模式(Prototype) ## 中介者模式(Mediator) ### 示例: 需求:发送消息,平台提供中介显示。 入口类:com.patterns.java.mediator.MediatorDemo 聊天室:com.patterns.java.mediator.ChatRoom 群友:com.patterns.java.mediator.User ## 解释器模式(Interpreter) ### 示例: 判断终端,是否是男的 判断终端,是否已婚 测试入口:com.patterns.java.interpret.InterpretDemo 表达式标准接口:com.patterns.java.interpret.Expression And表达式:com.patterns.java.interpret.AndExpression Or表达式:com.patterns.java.interpret.OrExpression 终端:com.patterns.java.interpret.TerminalExpression ## 命令模式(Command) ## 备忘录模式(Memento) ## 享元模式(Flyweight) # 参考 ## 时间 [java8日期时间API使用及各类格式化方式:](https://blog.csdn.net/weixin_43928997/article/details/91974163)