设计模式
文章平均质量分 88
La-
这个作者很懒,什么都没留下…
展开
-
设计模式 - D10 - 代理模式
设计模式 - D10 - 代理模式代理模式定义代理模式定义代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问使用代理模式创建代表,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。代理控制访问的方式:...原创 2021-02-20 07:15:48 · 193 阅读 · 0 评论 -
设计模式 - D9 - 状态模式
设计模式 - D9 - 状态模式状态机状态模式定义状态机假设现在有一台糖果机(GumballMachine),其状态包括有:HAS_QUARTER、NO_QUARTER、SOLD和SOLD_OUT四种;且insertQuarter、ejectQuarter等行动会使一个状态转换成另一个状态,那么这个状态机就可以使用Java对象实现为public class GumballMachine { final static int SOLD_OUT=0; final static int原创 2021-02-19 01:06:31 · 173 阅读 · 0 评论 -
设计模式 - D8 - 模板方法模式
设计模式 - D8 - 模板方法模式抽象算法模板方法模式定义一般形式钩子 - hook好莱坞原则抽象算法假设现在我们有一个Coffe类和一个Tea类,他们分别实现了各自的饮料冲调方法public class Coffee { public void prepareRecipe() { boilWater(); brewCoffeeGrinds(); pourInCup(); addSugar(); } publ原创 2021-02-17 23:30:45 · 148 阅读 · 0 评论 -
设计模式 - D7 - 适配器模式与外观模式
设计模式 - D7 - 适配器模式与外观模式面向对象适配器示例适配器模式定义对象适配器 vs 类适配器装饰者模式 vs 适配器模式外观模式最少知道原则面向对象适配器假设已有一个软件系统,当我们希望他能与一个新的厂商类库搭配使用,但这个新厂商类所设计出来的接口不同于就厂商接口时,我们可以写一个类,在不改变现有代码的情况下,解决这个问题。这个类,就是适配器示例一只走起路来像鸭子,叫起来像鸭子,那么他必定可能是一只鸭子包装了鸭子适配器的火鸡!假设我们现有Duck接口和Turkey接口,以及它们的实现类原创 2021-02-16 17:44:15 · 100 阅读 · 0 评论 -
设计模式 - D6 - 命令模式
设计模式 - D6 - 命令模式封装调用命令模式定义基本命令模式命令(Command)建立调用者(Invoker)建立客户建立注:空对象支持撤销的命令模式命令(Command)调用者(Invoker)客户(Client)支持宏命令的命令模式命令模式的用途队列请求日志请求封装调用封装调用时指把运算块包装成形,而调用此运算的对象不需要关心事情是如何进行,只需如何使用包装成形的方法来完成即可。利用封装方法调用,可以完成一些记录日志等操作。因此,在此引入命令模式命令模式可将“发出请求的对象”从“接收与执行这原创 2021-02-14 19:48:41 · 135 阅读 · 1 评论 -
设计模式 - D5 - 单例模式
设计模式 - D5 - 单例模式单例模式定义特点单例模式实现懒汉式单例模式线程问题饿汉式单例模式synchronizedsynchronized 同步方法双重检查加锁 - 同步代码块单例模式开发过程中,有一些对象,如:线程池、缓存等,只需要一个。如果制造出多个这样的实例,可能会导致许多问题产生。因此,在此引入单例模式。虽然利用全局变量(如:Java的静态变量)也可以仅制造出单个实例,但相比之下,单例模式可以在需要时才创建对象,节省资源,相对灵活定义单例模式确保一个类只有一个实例,并提供一个全局访原创 2021-02-12 21:56:50 · 85 阅读 · 0 评论 -
设计模式 - D4 - 工厂模式
设计模式 - D4 - 工厂模式使用 new 的缺陷工厂模式简单工厂工厂方法模式定义举例:PizzaStore依赖倒置原则抽象工厂模式定义举例:PizzaIngredientFactory工厂方法模式 vs 抽象工厂模式开发过程中,实例化这个活动不应该总是公开地进行,因为这样会造成耦合问题。除了使用new操作符之外,还有更多制造对象的方法,在此将会介绍一种新的制造对象的方法-工厂模式。使用 new 的缺陷使用 new 时,如:Duck duck = new MallardDuck(),是在实例化一个具原创 2021-02-12 02:07:35 · 93 阅读 · 0 评论 -
设计模式 - D3 - 装饰者模式
设计模式 - D3 - 装饰者模式装饰者模式开闭原则定义特点实现优缺点装饰者模式编写程序时,利用继承设计子类的行为是在编译时静态决定的,且所有子类都会继承到相同的行为;相反,利用组合的做法扩展对象的行为,可以在运行时动态地扩展,在使用新代码添加新功能的同时,无须修改现有代码,进而减少产生bug的机会假设现在有一个超类Beverage,其中的属性代表了各式调料,cost()方法会计算所有调料的价钱;为了提供各式各样的饮料,每个子类都需要继承超类Beverage,并重写cost()方法,扩展超类的功能,计原创 2021-02-11 04:02:14 · 212 阅读 · 0 评论 -
设计模式 - D2 - 观察者模式
设计模式 - D2 - 观察者模式观察者模式定义目的:松耦合示例Java内置的观察者模式观察者模式观察者模式通俗来讲就是:发布者 + 订阅者,只是发布者一般被称为主题(Subject),订阅者一般被称为观察者(Observer);主题对象管理着某些数据,当主题内的数据改变时就会通知观察者并以某种形式送到观察者手上,而观察者则已经事先订阅主题,以便在主题数据改变时能收到更新定义观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖者都会收到通知并自动更新;实现观察者模原创 2021-01-18 19:22:22 · 135 阅读 · 1 评论 -
设计模式 - D1 - 策略模式
设计模式 - D1 - 策略模式策略模式示例开发阶段:父类Duck及其子类维护阶段:新增Fly方法使用接口改进使用策略模式改进策略模式策略模式定义了算法族并分别封装起来,让他们可以互相替换,此模式让算法的变化独立于使用算法的客户。该模式体现了七大设计原则中的合成复用原则:多用组合/聚合,少用继承, 从而令系统具有更大的弹性。示例开发阶段:父类Duck及其子类假设有一个父类Duck,里面定义了各种鸭子的行为,包括quack(呱呱叫)、swim(游泳)、display(外观),同时有子类Mal原创 2021-01-17 22:01:01 · 88 阅读 · 0 评论