# 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)