
设计模式
文章平均质量分 60
楠瓜酥
这个作者很懒,什么都没留下…
展开
-
策略模式
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。利用继承,会导致的一些问题: 1、代码在多个子类中重复 2、运行时的行为不容易改变 3、很难知道所有对象的全部行为 4、改变会牵一发而动全身,造成其他对象不想要的改变但是如果将变化的行为使用接口,每个对象实现该接口,造成代码无法复用,耦合性较高,修改起来,代价较高,不方便维护。设计原则1:找出原创 2017-05-02 21:40:35 · 204 阅读 · 0 评论 -
迭代器与组合模式
迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象。 需求实例:遍历两份不同的菜单,其中早餐菜单使用数组保存菜单项,而午餐使用List保存菜单项。 1、使用java.util.Iterator接口public interface Iterator<E> {boolean hasNext();E next(原创 2017-06-03 19:09:28 · 567 阅读 · 0 评论 -
适配器模式与外观模式
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。如果目标接口发生改变,适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改。 客户通过目标接口调用适配器的方法对适配器发出请求。 适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口。 (客户表面上看到的是目标接口,实际上通过适配器,在调用目标接口的方法时,将实际的所有原创 2017-05-21 14:10:44 · 246 阅读 · 0 评论 -
命令模式
命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也可支持撤销的操作。 命令模式可将”动作的请求者”从”动作的执行者”对象中解耦。 需求实例:遥控器控制点灯的开关。 1、创建一个命令 客户负责创建命令对象(开灯)。让所有的命令对象实现相同的包含一个方法的接口。public interface Command { public void exe原创 2017-05-20 15:52:05 · 181 阅读 · 0 评论 -
模板方法模式
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。这个模板是用来创建一个算法的模板。模板就是一个方法。这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。 模板方法被声明为final,避免子类改变这个算法的顺序。在这个模板方法中,算法内的每个步骤都被一个方法代表了,某些方法(通用部原创 2017-05-30 15:49:44 · 225 阅读 · 0 评论 -
装饰者模式
装饰者模式动态地将责任附加到对象上。 ConcreteComponent是被装饰者,它继承自Component。 Decorator是装饰者共同实现的接口或抽象类。也是继承自Component。它有一个Component组件(引用),用于保存某个具体的装饰者。 ConcreteDecoratorA与ConcreteDecoratorB都是具体装饰者实现类。可以发现: 1、装饰者和被装饰者原创 2017-05-07 14:23:09 · 181 阅读 · 0 评论 -
观察者模式
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态,它的所有依赖者都会收到通知并自动更新。 主题和观察者定义了一对多的关系。观察者依赖于此主题,只要主题状态一有变化。观察者就会被通知。 利用观察者模式,主题是具有状态的对象,是真正拥有数据的对象,并且可以控制这些状态。另一方面,观察者使用这些状态,虽然这些状态并不属于他们。设计原则:保证交互对象之间的松耦合,将彼此依赖降到最低。需求实例原创 2017-05-06 17:47:14 · 371 阅读 · 0 评论 -
单件模式
单件模式确保一个类只有一个实例,并提供一个全局访问点。 把某个类设计成自己管理的一个单独实例,同时也避免其他类再自行产生实例。要想取得单件实例,通过单件类是唯一的途径。一个经典的单件模式(延迟实例化)public class Singleton { private static Singleton uniqueSingleton; //申明私有的构造器 private Si原创 2017-05-14 14:39:19 · 321 阅读 · 0 评论 -
工厂模式---抽象工厂模式
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体的类。抽象工厂运行客户使用抽象的接口来创建一组相关的产品,而不需要知道或关心实际产出的具体产品是什么,这样客户就从具体的产品中被解耦。 抽象工厂的任务是定义一个负责创建一组产品的接口。这个接口内的每个方法都负责创建一个具体产品。设计原则:依赖抽象,不要依赖具体类需求实例:不同的披萨加盟店利用本地区的原料工厂生成符合本地原创 2017-05-14 12:49:38 · 261 阅读 · 0 评论 -
工厂模式---工厂方法模式
一、简单工厂 简单工厂并不是一种设计模式。更像是一种编程习惯。 需求实例:创建一个披萨订单系统,根据不同的口味创建不同的披萨。 1、定义一个披萨商店//披萨商店public class PizzaStore { //简单披萨工厂 SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory fac原创 2017-05-07 19:15:46 · 260 阅读 · 0 评论 -
状态模式
状态模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,行为会随着内部的状态而改变。 将一群行为封装在状态对象中,context的行为随时可以委托到那些状态对象。当前状态会随着状态对象而改变,从而反应context内部的状态。通过将行为包装进状态对象,可以通过在context内简单地改变状态对象来改变context的行为。需求实例:糖果机销售糖果,有四种不同的动作:投币–25美分;转动原创 2017-06-11 15:34:39 · 193 阅读 · 0 评论