设计模式
超人不会飞007
胖子会飞?
展开
-
Reactor 设计模式
为了应对高并发的服务器端开发,微软在2009年提出了一种更优雅地实现异步编程的方式Reactive Programming即反应式编程。随后其他技术紧随其后,比如ES6通过引入类似的异步编程方式等。在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,Proactor用于异步I/O操作。Reactor模式称之为响应器模式,通常用于NIO非阻塞IO的网络通信框架中。在这之前,需要弄明白几个概念:什么是阻塞和非阻塞?阻塞和非阻塞转载 2020-10-30 16:33:22 · 251 阅读 · 2 评论 -
代理模式代码举例(java语言版)
前言:在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。与别的模式对比:1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。JAVA语言版代理模式一.静态代理:与动态代理比较,缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类。创...原创 2019-04-28 14:45:20 · 407 阅读 · 0 评论 -
过滤器模式代码举例(java语言版)
前言:这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。它结合多个标准来获得单一标准。(一般的过滤逻辑写在一个类里面,后期过滤逻辑增加会导致类代码急速膨胀,不利于维护。过滤器器模式是对过滤逻辑解耦)JAVA语言版过滤器模式(又叫标准模式)创建需要过滤的pojo类:public class Person { private String ...原创 2019-04-24 10:31:29 · 419 阅读 · 0 评论 -
享元模式代码举例(java语言版)
前言:享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。(感觉是不是很像数据库连接池是这个模式的实现,但是请不要搞错了,数据库连接池不是享元模式的实现。数据库连接池其实代理模式实现的一种方式,在代码模式那篇博客里我会具体解释)JAVA语言版享元模式创建接口:public interface Shape { void draw(...原创 2019-04-24 13:06:12 · 515 阅读 · 0 评论 -
责任链模式代码举例(java语言版)
前言:责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。JAVA语言版责任链模式创建日志的抽象类:pu...原创 2019-04-29 11:39:07 · 401 阅读 · 0 评论 -
命令模式代码举例(java语言版)
前言:命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。一般都会有三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口。这个设计模式是对操作方法的抽象。优点是对请求者"与"行为实现者"解耦JAVA语言版命令模式创建操作的抽象接口:public interface Order { vo...原创 2019-04-29 15:43:05 · 564 阅读 · 0 评论 -
观察者模式代码举例(java语言版)
前言:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。注意事项:1、JAVA 中已经有了对观察者模式的支持类。 2、避免循环引用。 3、如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式。JAVA语言版观察者模式创建观察者的抽象类:public abstract class Observer...原创 2019-04-29 16:17:03 · 3884 阅读 · 0 评论 -
迭代器模式代码举例(java语言版)
前言:迭代器模式使数据与遍历相分离,提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。适用范围:1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。JAVA语言版迭代器模式创建迭代器接口:public interface Iterator { boolean hasNe...原创 2019-04-30 16:12:24 · 291 阅读 · 0 评论 -
中介者模式代码举例(java语言版)
前言:中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。优点:1、降低了类的复杂度,将一对多转化成了一对一。 2、各个类之间的解耦。 3、符合迪米特原则。缺点:中介者会庞大,变得复杂难以维护。JAVA语言版中介者模式创建中介类与User类(这...原创 2019-04-30 16:47:28 · 539 阅读 · 0 评论 -
备忘录模式代码举例(java语言版)
前言:备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。优点:1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。JAVA语言版备忘录模式创建储存类:public...原创 2019-04-30 17:13:11 · 908 阅读 · 0 评论 -
外观模式代码举例(java语言版)
前言:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。使用场景:1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。JAVA语言版外观模式创建接口:public interface Shape { void draw();}创建接口实现类:public clas...原创 2019-04-23 16:58:12 · 786 阅读 · 0 评论 -
组合模式代码举例(java语言版)
前言:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。JAVA语言版组合模式创建实体类:public class Employee { private String name; private String position; private i...原创 2019-04-23 15:24:02 · 690 阅读 · 0 评论 -
原型模式代码举例(java语言版与go语言版)
JAVA语言版原型模式(深拷贝与浅拷贝)创建pojo类public class PersonalInfo implements Serializable { private String name; private String sex; private int age; public PersonalInfo(String name, String s...原创 2019-04-15 15:32:08 · 159 阅读 · 0 评论 -
抽象工厂模式代码举例(java语言版与go语言版)
JAVA语言版抽象工厂模式创建形状接口与颜色接口:public interface Shape { void draw();}public interface Color { void fill();}创建抽象工厂接口:public interface AbstractFactory { Color getColor(String color)...原创 2019-04-12 15:25:36 · 117 阅读 · 0 评论 -
设计模式(“四人帮”的设计模式与J2EE设计模式)
四人帮的23种(实际不止23种)设计模式(一定)创建型模式(这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活)1.工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创...原创 2019-04-10 10:33:10 · 452 阅读 · 0 评论 -
适配器模式(java语言版)
前言:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。比如已经有A和B,在不改动A和B的情况下,使其中一方能获得另一方的支持。JAVA语言版原型模式创建为媒体播放器和更高级的媒体播放器创建接口:public interface MediaPlayer { void play(String audioType,String fileName);}public ...原创 2019-04-16 09:54:56 · 114 阅读 · 0 评论 -
桥接模式(java语言版)
前言:主要解决在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活(组合替代继承)。下面这个例子使用桥接模式,在形状颜色都可以方便的扩展。JAVA语言版桥接模式创建颜色接口,以及颜色接口的实现类:public interface DrawAPI { void drawColor();}public class GreenCircle implements ...原创 2019-04-16 11:05:22 · 116 阅读 · 0 评论 -
访问者模式代码举例(java语言版)
前言:服访问者模式解决稳定的数据结构和易变的操作耦合问题。比如下面例子:鼠标,显示器,键盘,电脑它们的关系就是稳定的,所以鼠标,显示器,键盘,电脑实体类组成的结构就是稳定的数据结构。访问方式是多变的,所以可以在访问的时候根据具体需求去访问。JAVA语言版访问者模式创建电脑接口:public interface ComputerPart { void accept(Comput...原创 2019-04-16 14:42:05 · 365 阅读 · 0 评论 -
模板模式(java语言版)
JAVA语言版模板模式创建包含模板方法的抽象类:public abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); //模板 public final void play(){ //初始化游...原创 2019-04-16 15:06:16 · 385 阅读 · 0 评论 -
策略模式代码举例(java语言版)
前言:如果策略模式的策略很多会导致策略膨胀(谨用),如果实现很简单,建议用静态方法。JAVA语言版策略模式创建策略接口:public interface Strategy { public int doOperation(int num1, int num2);}创建接口实现类public class OperationAdd implements Strategy...原创 2019-04-16 15:35:08 · 393 阅读 · 0 评论 -
状态模式代码举例(java语言版)
前言:在行为受状态约束的时候使用状态模式,而且状态不超过 5 个(谨用)。这里举一个饮水机与水桶的例子JAVA语言版状态模式创建状态接口:public interface BucketState { void press();}创建状态接口的实现类:public class BucketStateFull implements BucketState{ @...原创 2019-04-16 16:33:26 · 432 阅读 · 0 评论 -
建造者模式代码举例(java语言版与go语言版)
前言:本来想写个有建造者、具体的建造者、监工等角色的建造者模式的。但是还是觉得举一个用户去快餐店点餐的例子更具普遍性。JAVA语言版建造者模式创建商品接口:public interface Item { String name(); Packing packing(); float price();}创建商品包装接口:public interf...原创 2019-04-13 16:40:42 · 157 阅读 · 0 评论 -
简单工厂模式和空对象模式代码举例(java语言版与go语言版)
JAVA语言版工厂模式和空对象模式创建接口:public interface Shape { public void draw(); public boolean isNil();}创建接口的实现类:public class Circle implements Shape{ @Override public void draw() { ...原创 2019-04-12 10:48:22 · 116 阅读 · 0 评论