设计模式汇总
java设计模式汇总
兴趣使然的CV工程师
摆烂高手
展开
-
23.职责链模式
职责链模式中:每个接收者都包含另外一个接受者的引用,如果一个对象不能处理请求,那么就会把相同的请求传给下一个接收者抽象类public abstract class Handler { //后继者,即如果处理不了请求要把任务丢给谁 private Handler successor; public Handler getSuccessor() { ...原创 2021-07-29 19:33:00 · 49 阅读 · 0 评论 -
22.策略者模式
Strategy(抽象策略):抽象策略类,并且定义策略执行入口ConcreteStrategy(具体策略):实现抽象策略,实现algorithm方法Context(环境):运行特定的策略类。策略模式需要一个策略接口,不同的策略实现不同的实现类,在具体业务环境中仅持有该策略接口,根据不同的场景使用不同的实现类即可。面向接口编程,而不是面向实现。策略模式的优点:1、干掉繁琐的 if...原创 2021-07-29 19:06:00 · 101 阅读 · 0 评论 -
21.状态模式
状态模式( state Pattern)的定义如下:允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象( Objects for States),状态模式是对象行为型模式状态模式包含如下角色:Context:环境类,也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。State:抽象状态类,定义一个...原创 2021-07-29 17:00:00 · 70 阅读 · 0 评论 -
20.解释器模式
终结符表达式(Terminal Expression):实现文法中与终结符有关的解释操作。文法中每一个终结符都有一个具体的终结符表达式与之相对应。比如我们的R=M+N运算,M和N就是终结符,对应的解析M和N的解释器就是终结符表达式。非终符结表达式(Nonterminal Expression):实现文法中与非终结符有关的解释操作。文法中的每一条规则都对应了一个非终结符表达式。非终结表达式一般是...原创 2021-07-29 16:06:00 · 48 阅读 · 0 评论 -
19.备忘录模式
/** * @author wuyimin * @create 2021-07-29 11:16 * @description 原发器角色 */public class Chessman { //棋子的姓名 x,y坐标 private String chessName; private int x; private int y; ...原创 2021-07-29 12:07:00 · 67 阅读 · 0 评论 -
18.中介者模式
中介者模式是用一个中介对象来封装一系列的对象交互,中介者使得各个对象不需要显示的互相调用,使其耦合松散,而且可以独立的改变他们之间的交互本来的情况是客户找houseMaster,houseMaster找wife,这样一层一层追下去,现在全部交给中介来做抽象同事类/** * @author wuyimin * @create 2021-07-29 9:56 * @desc...原创 2021-07-29 10:38:00 · 55 阅读 · 0 评论 -
17.观察者模式
观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。观察者接口:实现更新方法public interface Observer { public void update(String ...原创 2021-07-28 19:13:00 · 68 阅读 · 0 评论 -
16.迭代器模式
提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示接口/** * @author wuyimin * @create 2021-07-28 18:02 * @description 抽象集合接口 */public interface Aggregate { public void add(Object o); pub...原创 2021-07-28 18:10:00 · 47 阅读 · 0 评论 -
15.访问者模式
在被访问的类里添加一个接待外部访问者的接口,在对一个对象结构中的对象做多个复杂操作的时候,又 不想让操作污染这些对象,可以使用该模式UML类图介绍:Bill接口,这个接口有一个accept方法去接受访问者/** * @author wuyimin * @create 2021-07-28 15:57 * @description 账单的接口 */public interf...原创 2021-07-28 16:48:00 · 60 阅读 · 0 评论 -
14.命令模式
我们经常需要对一些对象发送命令请求,但是我们并不知道是哪个具体的对象接受到了这些命令,这个时候可以使用命令模式命令模式会将一个请求封装为一个对象,来使用不同的参数表达不同的请求,同时命令应该是可以撤销的对于这样一个遥控器,使用命令模式去实现它的功能接口类和几个实现类/** * @author wuyimin * @create 2021-07-28 11:08 * @des...原创 2021-07-28 11:43:00 · 40 阅读 · 0 评论 -
13.模板方法模式
在一个抽象类公开定义了执行它的方法的模板,它的子类可以按照需要重写方法实现,单调用将以抽象类种定义的方式进行public abstract class Drink { //不允许子类重写此方法 public final void make() { add(); doSomething(); give(); } ...原创 2021-07-28 10:14:00 · 47 阅读 · 0 评论 -
12.代理模式
为一个对象提供一个替身,来控制这个对象的访问。通过代理对象访问目标对象,这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作被代理的对象可以是远程对象,创建开销大的对象,需要安全控制的对象代理模式主要分为三种 静态代理,动态代理(也叫接口代理、jdk代理),cglib代理(可以在内存创建对象而不需要实现接口,属于动态代理的范畴)静态代理被代理类和代理类需要实现相同接口或者继承父类...原创 2021-07-27 17:01:00 · 56 阅读 · 0 评论 -
11.享元模式(蝇量模式)
运用共享技术有效的支持大量细粒度的对象,常用于系统底层的开发,像数据库连接池是单例模式但是连接池里的对象是享元模式的经典运用场景享元模式能解决重复对象的内存浪费问题,当系统种有大量相似对象,需要缓冲池时,不需要总是创建新对象,可以从缓冲池里面拿,这样可以降低系统内存,同时提高效率抽象类:/** * @author wuyimin * @create 2021-07-27 11:1...原创 2021-07-27 11:36:00 · 49 阅读 · 0 评论 -
10.外观模式(过程模式)
外观模式为子系统种的一组接口提供了一个一致的界面,此模式定义了一个高层接口使得这一子系统更加容易使用外观模式就是解决多个复杂接口带来的操作问题,起到简化用户操作使用的效果/** * @author wuyimin * @create 2021-07-27 10:26 * @description 使用饿汉式创建单例 */public class TV { privat...原创 2021-07-27 10:55:00 · 46 阅读 · 0 评论 -
9.组合模式
抽象基类/** * @author wuyimin * @create 2021-07-26 19:01 * @description 抽象类 */public abstract class Component { public Component(String name) { this.name = name; } protect...原创 2021-07-26 19:43:00 · 44 阅读 · 0 评论 -
8.装饰者模式
动态的将新功能附加到对象上实例最基础的抽象类Drink/** * @author wuyimin * @create 2021-07-26 17:14 * @description 饮料的抽象类 包含描述,价格以及子类计算总价的方法 */public abstract class Drink { private int price; private Stri...原创 2021-07-26 17:07:00 · 67 阅读 · 0 评论 -
7.桥接模式
主要是为了将抽象和实现行为分开来传统方法解决这个问题的时候每次增加一个品牌或者手机类型都会导致要增加三个类别的手机,比如增加中兴品牌就要增加中兴的折叠,直立和选择给定接口Brand和它的两个实现类/** * @author wuyimin * @create 2021-07-26 16:22 * @description 品牌的接口 */public interface...原创 2021-07-26 16:59:00 · 49 阅读 · 0 评论 -
6. 适配器模式
让原本接口不匹配不能在一起工作的两个类通过适配器类在一起工作类适配器/对象适配器/** * @author wuyimin * @create 2021-07-26 9:56 * @description 五伏充电器接口 */public interface Ivotage5V { public int change();}/** * @author wuyim...原创 2021-07-26 11:05:00 · 86 阅读 · 0 评论 -
5.建造者模式(生成器模式)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的使用场景1)相同的方法,不同的执行顺序,产生不同的事件结果时,可以使用建造者模式。2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不想同时,可以使用建造者模式。3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这时候可以使用建造者模式。 4)在对象创建过程中会使用到系统...原创 2021-07-25 21:57:00 · 107 阅读 · 0 评论 -
4. 原型模式
使用原型去拷贝出多个对象克隆羊案例:/** * @author wuyimin * @create 2021-07-25 16:51 * @description 实现克隆接口,调用父类的克隆方法 */public class Sheep implements Cloneable { String name; int age; public Sheep(...原创 2021-07-25 18:03:00 · 43 阅读 · 0 评论 -
3.工厂模式
简单工厂模式由一个工厂对象决定创建出哪一种产品类的实例定义了一个创建对象的类,由这个类来封装实例化对象的行为。计算类,工厂类,测试类public class Operation { int num1; int num2; public int getNum1() { return num1; } public ...原创 2021-07-24 17:13:00 · 48 阅读 · 0 评论 -
2.单例模式
饿汉式在单例模式中,如果存在释放资源的情况下,就不能加final修饰了 public void releaseInstance(){ if(instance != null){ instance = null; } } 释放资源之后,如果需要重新使用这个单例,就必须存在重新初始化的过程,所以不能加final,对于不需要释放资源的情况,可以加final 总而言之,要不要加final修饰,可以根...原创 2021-07-24 11:41:00 · 74 阅读 · 0 评论 -
1.七大设计原则
1.单一职责原则--每个类只负责一件事2.接口隔离原则客户端不应该依赖他不需要的接口,两个类都实现了一个接口,接口里有五个方法,第一个类需要使用全部的方法,第二个类只需要使用三个方法,这样第二个类就违反了接口隔离原则按照接口隔离原则就应该拆分成两个接口,来处理两个类3.依赖倒转原则--接口的依赖可以有接口实现,构造器实现,set方法实现java的概念:抽象指的是抽象类和接口,细节...原创 2021-07-23 23:34:00 · 69 阅读 · 0 评论