`
tgwiloveyou
  • 浏览: 9826 次
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论
文章列表
       上篇介绍了命令模式的理论知识,这里再写两个小例子,加深理解。      1、撤销命令,关键在于命令执行的时侯保存这个命令对象,这就是把操作封装成对象的好处。 //这个不变 public class Light { public void off(){ System.out.println("off..."); } public void on(){ System.out.println("on..."); } } //Command接口添加一个undo() public inter ...
        先看例子: //灯:有开、关两个操作 public class Light { public void off(){ System.out.println("off..."); } public void on(){ System.out.println("on..."); } } //命令 public interface Command { public void execute(); } public class LightOnCommand implements Command { ...
        工厂方法模式只是针对一种产品,虽有多个具体产品,但只有一个抽象产品类;而抽象工厂模式针对多个产品,它有多个抽象产品类,并且每个产品类有多个具体子类产品;抽象工厂模式能够灵活的实现"整套产品& ...
        简单工厂虽然对产品生产提供了非常好的封装,但并没有遵循面向对象设计的”开放-关闭原则“,工厂方法模式可解决这个问题。          “开放-关闭原则”:对扩展开放、对修改关闭。什么意思呢?我的理解是:当我们要扩展新功能时,不需要修改原来的代码,简单的添加某个类、或继承某个抽象类、或实现某个接口就可以完成。          再看上篇中SimpleFactory这个工厂类,如果我们要新增一种输出设备(这是实际项目中肯定会面临的变化)则必须修改这个类,即添加一个if/else或switch/case语句。          下面是工厂方法模式: public ...
         工厂模式,应该是应用最为广泛、最为重要的设计模式,它里面包括三种:简单工厂(不包括在23种经典的模式中)、工厂方法模式以及抽象工厂模式,由前往后抽象程度越来越高。           先介绍下简单工厂。            编码过程中,我们新手经常会写这样的代码: //other code... //输出设备 OutPut output = null; if(name.equals("print")){ //打印机   output = new Print(); }else if(name.equals(& ...
       单例模式,最简单的模式,即保证某个类在整个运行过程中仅仅只有一个实例。          私有化构造函数,防止外界随意new一个对象。        那么如何创建实例呢?没有实例导致我们无法操作实例方法,但我们有static静态方法,不需要实例而是直接通过类名就可以调用。 public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton==nul ...
  装饰者模式,见名知意。装饰装饰,何为装饰,无非就是在某个东西上外面再套一层东西,装饰者模式大概就是这样的。      比如现在有一个类A,我们想为它增加一些新的功能,但又不想修改它原来的代码,怎么办?直接的想法是继承,但继承灵活性并不好,推荐多用组合,少用继承。     应用组合:新建一个类B(装饰者),把A(被装饰者)组合到B中,就可以让B行使A的职能,但应该注意两点:   一、A和B应该有相同的超类或接口,这样才能够利用多态在使用A的地方使用B,我们采用继承,让B继承自A。   二、让B继承自A并不是为了继承A类中的方法,而仅仅是声明一个共同的类型,使得在外人看来,A和B ...
策略模式,顾名思意,针对不同的要求采用不同的策略处理问题。   实际的“策略”通常都是算法簇,处理同一个问题或者执行同一动作可能有多种策略,而这些策略之间的切换如果以硬编码的方式写在代码中,则相当丑陋,策略模式提供了策略切换的一个动态的机制,即可以运行时指定。   比如,现在有一个关于鸭子系统,有一个抽象父类Duck, 里面声明了几个鸭子的动作,如 叫、飞、游泳、展示(在这里鸭子动作即是算法簇),针对这个抽象类有多种继承的子类,如MallarDuck(绿头鸭)、RedheadDuck(红头鸭)、RubberDuck(橡胶鸭), 现在问题出来了:并不是每种鸭子都会飞,例 ...
        好久没搞java了,要找工作了,复习下设计模式~~        观察者模式:描述的是一对多的关系,当”一”的状态发生变化时,会通知”多”的一端,前提是”多”个对象必须事先注册到”一”的对象上,让“一”知道它们的存在。        举个形象的例子:我们平时订阅杂志,每个订阅者(即观察者)必须到杂志社注册个人信息,杂志社为了在日后能够顺利分发杂志,此时必须保存每个订阅者的信息,当杂志社出版新杂志,它就会通过之前那个记录列表一个一个的分别通知它的每一位订阅者,只要你在它那里注册过,就会一直收到新的杂志。当然,你可以选择取消订阅,这样杂志社就不会再向你送新杂志了。只有杂志社一 ...
Global site tag (gtag.js) - Google Analytics