设计模式
Good LA
这个作者很懒,什么都没留下…
展开
-
设计模式之静态代理和动态代理
定义本质是对目标方法的增强,允许代理类在执行目标方法时,做些自己的事来增强目标方法。静态代理如果知道被代理类的具体职责,可以使用静态代理。如果不清楚被代理类是谁,只能只用动态代理。这是静态代理和动态代理的区别,即是否清楚被代理对象是谁。UML代理类和被代理类同时实现Movable接口,此时,除了可以增强Tank对象外,还允许对代理对象做增强,实现代理和代理之间的互相嵌套。是不是很像装饰者模式?其实有些设计模式本身就没有清晰的边界。代码UML图已经很清晰了,写点核心代码,体会这个UML的精髓。原创 2021-12-07 00:17:18 · 203 阅读 · 0 评论 -
设计模式之模版方法
定义父类(抽象类)定义了方法的执行步骤,但是不定义具体的执行逻辑,由子类决定父类的行为。UML类图代码抽象类定义玩的动作,分初始化游戏、开始游戏、结束游戏。但是没有定义其中的具体执行细节。public abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); //模板 public final void play(){原创 2021-12-06 23:00:26 · 2360 阅读 · 0 评论 -
设计模式之迭代器模式
定义这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。本质上是定义了A类对象具备共同的行为,比如访问下一个元素、移除一个元素等。具体的行为由具体的A对象决定。UML容器接口支持获取迭代器,在子类中定义迭代逻辑。代码统一的迭代器接口,定义迭代器应该具备哪些能力public interface Iterator { public boolean hasNext(); public Object next();}统一的容器接口,定义拥有迭代器的能力。public原创 2021-12-06 05:19:36 · 84 阅读 · 0 评论 -
设计模式之观察者模式
定义定义事件和处理逻辑的一对多关系。当监听到某个事件发生时,通知具体的处理逻辑。UMLsubject注册了待通知的对象,调用内部的notifyAllObservers方法,表示触发了相关的事件,通知List集合对象。代码public class Subject { private List<Observer> observers = new ArrayList<Observer>(); private int state; pu原创 2021-12-06 04:57:48 · 71 阅读 · 0 评论 -
设计模式之责任链模式
定义为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。示例前端传入一个字符串,后端需要对字符串做过滤,但是目前我不知道要过滤哪些东西,意味着未来会拓展更多的过滤方式。比如,第一步过滤script脚本、第二步过滤敏感词等。// 部分人的处理方式if(存在script脚本) doSomething原创 2021-12-06 04:36:06 · 285 阅读 · 0 评论 -
设计模式之装饰器模式
概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。和继承的区别一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很多。比如:我有一个轮子,有滚动的功能。现在,我想把它装在汽车上,有驾驶的功能。我想让我的汽车是红色的。这时候使用继承实现的话没问题,但是如果有一天我想要一个红色的轮子,把它装在汽车上,有驾驶的功能,汽车要蓝色的。这时候原创 2021-12-06 03:45:02 · 442 阅读 · 0 评论 -
设计模式之门面模式
为什么要门面模式客户端连接系统时,如果一个客户端需要对接的子系统太多,就会导致调用链路错综复杂,这时候如果可以隐藏系统的调用关系,把功能交给一个单独的系统去完成,这样就会干净得多。缺点:client和服务方的调用链路关系强绑定,如果服务方需要做服务迁移或者相关优化,需要牵动client开发人员一起动。门面模式客户端只跟facade打交道,如果需要什么功能,可以直接告诉接待员,接待员负责实现逻辑细节。优点:client不关心一个功能在服务端是怎么流转的,解耦客户端和服务端。如果服务端需要做优化,c原创 2021-12-05 16:19:45 · 305 阅读 · 0 评论 -
设计模式之工厂模式
本质任何可以产生对象的方法或者类,都是工厂模式。为什么有了new后,还要工厂灵活控制生产过程。比如,创建对象前后需要做统一日志处理,创建前需要校验调用方的权限等。简单工厂一种简答的工厂设计模式,专门生产一类产品。优点: 针对一类商品的扩展简单,只需要添加子类以及在工厂中添加创建子类过程。缺点:生产的对象属于一类产品,如果要跨类别生产,只能重新写另外一个工厂类。抽象工厂本质上是简单工厂的工厂。支持生产多类产品(多个产品镞),允许跨产品类型创建产品。优点:当一个产品族(某一类产品)中的原创 2021-12-05 15:48:56 · 256 阅读 · 0 评论 -
设计模式之单例模式
定义一个类的实例最多只有一个。代码单例模式网上有七八种,但不全是线程安全的,工作中最常用的,往往是饿汉式。spring的IOC容器的实例默认也是单例的,而且是懒汉式的。最简单的单例饿汉式,类加载的时候完成单例的初始化public class Singleton { private Singleton() {} private static Singleton single=new Singleton(); //静态工厂方法 public static Singl原创 2021-12-05 12:53:53 · 79 阅读 · 0 评论 -
实用设计模式之对设计模式的理解
本质设计模式本质上是完成一件事的套路,目的是使得代码更健壮、更符合开闭原则。无论何种设计模式,都没有完全统一的范式,真正核心的是这个设计模式达到目的的思路。同一种设计模式,达到目的的方式不止一种,但是思路是一样的。因此,可以认为,设计模式的核心是它的思路。...原创 2021-12-05 12:35:43 · 102 阅读 · 0 评论 -
实用设计模式之策略模式
定义策略模式本质上是允许使用不同的方式去做一类事情,比如:使用不同的排序算法去做排序、使用不同的匹配算法去做匹配。歧义网上有说策略模式取代了原来需要用if、swich做的事情,这样说没问题,但是不等于原来if、swich做的事情都适合用策略模式,因为策略模式意味着需要创建定义统一接口和更多子类,如果if逻辑本身就很简单,还想使用策略模式,这就得不偿失了。UML类图代码示例class Client { public static void main(String[] args) {原创 2021-12-05 12:29:55 · 130 阅读 · 0 评论