设计模式之命令模式

在软件开发中,我们经常需要向某些对象发送请求(调用其中的某个或某些方法),但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,此时,我们特别希望能够以一种松耦合的方式来设计软件,使得请求发送者与请求接收者能够消除彼此之间的耦合,让对象之间的调用关系更加灵活,可以灵活地指定请求接收者以及被请求的操作。

命令模式为此类问题提供了一个较为完美的解决方案。命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

阅读全文 »

设计模式之中介者模式

如果在一个系统中对象之间的联系呈现为网状结构。对象之间存在大量的多对多联系,将导致系统非常复杂,这些对象既会影响别的对象,也会被别的对象所影响,这些对象称为同事对象,它们之间通过彼此的相互作用实现系统的行为。在网状结构中,几乎每个对象都需要与其他对象发生相互作用,而这种相互作用表现为一个对象与另外一个对象的直接耦合,这将导致一个过度耦合的系统。

classDiagram
class A
class B
class C
A ..> B : 
A ..> C : 
B ..> A : 
B ..> C : 
C ..> A : 
C ..> B
阅读全文 »

设计模式之原型模式

原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。

阅读全文 »

设计模式-模板方法模式

在软件开发中,会遇到下面这种情况:

某个方法的实现需要多个步骤,其中有些步骤是固定的,而有些步骤并不固定,存在可变性。为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计。

阅读全文 »

设计模式之建造者模式

建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。
它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便,无须修改已有代码,系统具有较好的扩展性。

阅读全文 »

设计模式之抽象工厂模式

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。

此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。

阅读全文 »

工厂模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下,new操作符直接生成对象会带来一些问题。举例来说,许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置;选择生成哪个子对象实例;或在生成你需要的对象之前必须先生成一些辅助功能的对象。在这些情况,新对象的建立就是一个“过程”,不仅是一个操作,像一部大机器中的一个齿轮传动。

那么如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和复杂过程呢?答案就是工厂模式。

阅读全文 »

面向对象设计原则

如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。

在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。

阅读全文 »

linux命令awk

Awk的基本功能就是查找具某种模式的文本行(或者其他单位的文本)。当匹配某个模式后,awk会对该行执行指定的动作。Awk然后继续输入行,直到文件输入处理完毕。

awk 命令的大致结构如下:

1
2
3
4
5
awk 'program' inputfile1 inputfile2 inputfile3 ...
# 也可以运行awk程序,不带输入文件
awk 'program'
## awk会使程序导向到标准输入,直到你输入Ctrl-d 来表示‘end-of-file’
## 在非POSIX 操作系统中,‘end-of-file’有可能不同,如在OS/2 中则是Ctrl-z

注意,awk是标准的管道, 如果 ‘program’ 中没有和输入有关的逻辑,awk是不会读取输入的.例如:

awk 'BEGIN { print "Hello World!" }' 不会读取任何输入。
awk '{print}' 会持续读取输入,直到 Ctrl-d

如果awk 程序的程序很长,那么可以使用文件中的代码来执行awk

1
awk -f 'program-file' inputfile1 inputfile2 inputfile3 ...

举个例子:

  1. 创建文件hello
1
2
#! /bin/awk -f
BEGIN { print "Hello World!" }
  1. 使用awk文件
1
2
$ awk -f hello
Hello World!

也可以直接对脚本赋权 chmod +x hello,然后就可以直接执行 hello。

awk 基础

linux命令top

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序。

阅读全文 »