设计模式(2)- 深入浅出设计模式 阅读笔记

栏目: 后端 · 发布时间: 5年前

内容简介:命令模式就是不改变原有代码,而在原有代码的基础之上封装一层,为每个命令创建一个 类,而这个类又实现了统一的一个接口。例如我们有电灯,电风扇,他们的开关方法 分别叫用Python描述:执行结果:

命令模式

命令模式就是不改变原有代码,而在原有代码的基础之上封装一层,为每个命令创建一个 类,而这个类又实现了统一的一个接口。例如我们有电灯,电风扇,他们的开关方法 分别叫 light , lights_out , on , off

Python 描述:

class Light:
    def light(self):
        print("light on...")

    def lights_off(self):
        print("lights off...")


class Fan:
    def on(self):
        print("fan on...")

    def off(self):
        print("fan off...")


class Command:
    def execute(self):
        raise NotImplemented()


class LightOnCommand(Command, Light):
    def execute(self):
        self.light()


class LightOffCommand(Command, Light):
    def execute(self):
        self.lights_off()


class FanOnCommand(Command, Fan):
    def execute(self):
        self.on()


class FanOffCommand(Command, Fan):
    def execute(self):
        self.off()


if __name__ == "__main__":
    LightOnCommand().execute()
    LightOffCommand().execute()
    FanOnCommand().execute()
    FanOffCommand().execute()

执行结果:

$ python command.py 
light on...
lights off...
fan on...
fan off...

Java 描述:

// Fan.java
public class Fan {
    public void on() {
        System.out.println("fan on...");
    }

    public void off() {
        System.out.println("fan off...");
    }
}

// Light.java
public class Light {
    public void light() {
        System.out.println("light on...");
    }

    public void lights_off() {
        System.out.println("light off...");
    }
}


// Command.java
public interface Command {
    public void execute();
}


// LightOnCommand.java
public class LightOnCommand implements Command {
    Light light;

    public LightOnCommand(Light light) {
        this.light = light;
    }

    public void execute() {
        light.light();
    }
}


// LightOffCommand.java
public class LightOffCommand implements Command {
    Light light;

    public LightOffCommand (Light light) {
        this.light = light;
    }

    public void execute() {
        light.lights_off();
    }
}


// FanOnCommand.java
public class FanOnCommand implements Command {
    Fan fan;

    public FanOnCommand(Fan fan) {
        this.fan = fan;
    }

    public void execute() {
        fan.on();
    }
}


// FanOffCommand.java
public class FanOffCommand implements Command {
    Fan fan;

    public FanOffCommand(Fan fan) {
        this.fan = fan;
    }

    public void execute() {
        fan.off();
    }
}


// Main.java
public class Main {
    public static void main(String[] args) {
        Light light = new Light();
        Fan fan = new Fan();

        LightOnCommand lightOnCommand = new LightOnCommand(light);
        LightOffCommand lightOffCommand = new LightOffCommand(light);

        lightOnCommand.execute();
        lightOffCommand.execute();

        FanOnCommand fanOnCommand = new FanOnCommand(fan);
        FanOffCommand fanOffCommand = new FanOffCommand(fan);

        fanOnCommand.execute();
        fanOffCommand.execute();
    }
}

执行结果:

$ javac *.java && java Main 
light on...
light off...
fan on...
fan off...

适配器模式

适配器模式要理解起来就比较简单,就是通过适配器,把两个原本不兼容的类通过 适配器转换,达成可以单向或双向调用。典型的生活中的例子就是,例如假设我买了 一个港版的iPhone,随机附赠的充电头也是港版的,使用电压和大陆不一样,插头 也不一样,所以就要购买一个转换接口,把国标插头转换成港版插头能用的插头。

模板方法模式

模板方法就是规定了大概的步骤,但是留有细节步骤让子类去实现。例如某调度系统 可能要求支持多种算法,但是大体步骤都是相似的,于是就可以通过模板方法模式把 相似的步骤都写下来,然后把具体细节实现留给子类完成。当最后调用的时候就会根据 实例化不同而产生不同细节上的效果。

迭代器模式

用Python的同学想必对迭代器非常的熟悉,我们的类只要实现了 __iter____next__ 协议,就可以用于 for 循环中。

状态模式

状态模式和策略模式非常的想象,区别在于,策略模式是用户来设置具体使用哪一种 实现,而状态模式是由类内部的状态机来完成的,例如为每一个类都实现可能的操作 会带来的影响和下一个状态,于是当启动状态机以后,就开始运转了。

代理模式

代理模式由于涉及Java远程调用,就暂时不上代码了,但是要理解起来,很简单,请看 自己的爬土啬方法。

最后

看完了《Head First 设计模式》。一直很喜欢《Head First》系列书籍,这本书也不 例外。设计模式是软件开发过程中常遇到的解决复杂度的一些方法,经过总结,而得出 来的“模式”。虽然看完了这本书,但是真正掌握他们还得在 “写代码-思考-领悟设计模式”的循环中才能掌握。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS设计指南

CSS设计指南

史密斯 / 李松峰 / 人民邮电出版社 / 2013-5 / 59.00元

《图灵程序设计丛书:CSS设计指南(第3版)》是一本面向初中级读者的经典设计指南。全书共分8章,前4章分别介绍了HTML标记和文档结构、CSS工作原理、定位元素、字体和文本,对规则、声明、层叠、特指度、选择符等基本概念进行了详细解读。随后4章介绍了页面布局、界面组件,CSS3圆角、阴影、渐变、多背景等视觉设计技巧,最后还对如何实现最前沿的响应式设计进行了通俗易懂的演示。一起来看看 《CSS设计指南》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具