前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

来源于自己买的一本书 图解设计模式 ,博主这里做了一份笔记记录

UML :统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言

1、类图

1、类与层次结构

1、三个框 依次是 类名、字段名、方法名

2、空心箭头表现了子类和父类之间的层次关系 ,子类指向父类

3、静态的属性(字段、方法)会加下划线

4、抽象的属性(类、方法)会以斜体的方式显示

1558668339516

public abstract class ParentClass {
    int field1;
    static char field2 ;
    abstract void methodA ();
    double methodB(){
        return 0 ;
    }
}

class childClass extends ParentClass {
    void methodA(){
    }
    static void methodC(){
    }
}

2、接口与实现

1、UML 以 ` «interface»` 表示接口

2、虚线箭头表现了实现类和接口直接的关系,又子类指向父类

1558672174384

public interface Printalble {

    abstract void print() ;
    abstract void newPage() ;

}


class PrintClass implements Printalble{

    @Override
    public void print() {
    }
    @Override
    public void newPage() {
    }
}

3、聚合

解释:我们将下面这种持有的关系成为聚合

1、将 带有空心◇菱形的实现表示聚合关系,从持有者指向被持有者

1558672542434

public class Color {
}


public class Fruit {
    Color color ;
}


public class Basket {

    Fruit [] fruits ;
}

4、可见性(访问控制)

1、 + 表示public方法和字段

2、- 表示private方法和字段

3、# 表示protect方法和字段

4、~表示 default方法和字段

1558672815903

public class Something {
    private int privateField ;
    int packageField ;
    protected int protectField ;
    public int publicField ;

    private void privateMethod() {} ;
    void defaultMethod () {};
    protected  void protectMethod(){} ;
    public void packageMethod{} ;

}

5、类的关联

1558673034009

2、时序图

类图表示的是静态关系,时序图表示的是随时间发生变化的动态行为,时序图的阅读顺序是沿着生命线从上而下阅读

1、最上方的三个长方形,冒号后面是类名

2、每个实例都有一条虚线,这个虚线叫生命线,可以理解为时间自上而下流失 ,虚线下面有个细长的长方形,表示实例处于某种活动中

3、黑色箭头表示调用,虚线箭头表示返回方法,有一些时序图会省略这个返回箭头

具体分析:

  • Client实例调用Client:work

  • Client:work 调用了Server:open方法

  • Server:open调用完成返回

  • Client:work 调用了Server:print方法

  • Server:print 调用了Device:write方法

  • Device:write 调用完成返回

  • Server:print 调用完成返回

  • Client:work方法调用Server:close

  • Server:close 调用完成返回

  • Client:work 调用结束

1558673336331

public class Client {
    Server server ;
    void work(){
        server.open();
        server.print("HealerJean");
        server.close();
    }
}
class  Server{
    Device device ;
    void open(){}
    void print(String s) {
        device.write(s);
    }
    void close(){}
}
class Device {
    void write(String s) {}
}

3、设计模式分类

3.1、创建型

1、Singleton,单例模式:

2、Factory Method,工厂方法:使一个类的实例化延迟到了子类。

3、Prototype,原型模式:

4、Builder,建造模式:

5、Abstract Factory,抽象工厂:

3.2、行为型

1、Iterator,迭代器模式

2、Template Method 模板方法

3、Strategy,策略模式

4、Visitor,访问者模式

5、China of Responsibility,职责链模式

6、Mediator,中介者模式

7、Observer,观察者模式

8、Memento,备忘录模式

9、State,状态模式

10、Command,命令模式

11、Interpreter,解释器模式

3.3、结构型

1、Adapter,适配器模式

2、Bridge,桥接模式

3、Composite,组合模式

4、Decrator,装饰模式

5、Facade,外观模式

6、Flyweight,享元模式

7、Proxy,代理模式

 

 
 

-