【设计模式】7.外观
定义 外观(facade)模式提供了一个统一的接口,用来访问子系统中的一群接口 解决的问题 降低了客户端与子系统之间的耦合度 简化了复杂子系统的使用 实现 假设有两个子系统: public class Subsystem1 { public void begin() { System.out.println("Subsystem1 begin")...
定义 外观(facade)模式提供了一个统一的接口,用来访问子系统中的一群接口 解决的问题 降低了客户端与子系统之间的耦合度 简化了复杂子系统的使用 实现 假设有两个子系统: public class Subsystem1 { public void begin() { System.out.println("Subsystem1 begin")...
定义 原型(prototype)模式使用原型对象指定要创建对象的类型,通过克隆原型对象来创建新对象 解决的问题 克隆接口对象时不知道对象的真实类型,因此由对象提供一个克隆自身的方法 实现 原型接口Prototype有一个克隆自身的方法: public interface Prototype { Prototype clone(); } 具体实现类负责创建对象和字段拷贝: pu...
定义 建造者(builder)模式(也称为生成器模式)用于封装对象的构造过程,允许按步骤构造 最典型的实例:StringBuilder 解决的问题 封装了对象的构造过程,降低了创建对象的复杂度,方便用户创建复杂的对象 实现 假设Product类有a和b两个部件: public class Product { private int a, b; public int g...
定义 抽象工厂(abstract factory)模式提供多个接口,用于创建一系列相关的对象(这些对象是相关的,必须一起创建出来),工厂方法模式只用于创建一个对象 解决的问题 解决了工厂方法模式的缺点,每个子工厂类可以创建多种产品 实现 假设ProductA和ProductB接口各有两种实现类: public interface ProductA { } public class ...
定义 工厂方法(factory method)模式在父工厂类中定义了一个创建对象的接口,由子工厂类决定实例化哪个类 解决的问题 将实例化操作推迟到子工厂类,解决了简单工厂模式的缺点 实现 假设Product接口有两种实现类: public interface Product { } public class ConcreteProduct1 implements Product {...
定义 简单工厂(simple factory)模式将实例化操作单独放到一个简单工厂类中,让简单工厂类来决定应该实例化哪个具体子类 解决的问题 将实例化操作与使用对象的操作分离,客户端不再需要知道有哪些子类以及应当实例化哪个子类,实现了客户端和具体子类的解耦 实现 假设Product接口有三种实现类: public interface Product { } public class...
定义 单例模式(singleton pattern)确保一个类只有一个实例,并提供该实例的全局访问点 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量 实现 线程不安全 public class Singleton { private static Singleton ...
Self-Supervised Heterogeneous Graph Neural Network with Co-Contrastive Learning 2021 KDD 论文链接:https://arxiv.org/pdf/2105.09111 官方代码:https://github.com/liun-online/HeCo (少见的作者代码写得清楚又简单) 个人实现:htt...
使用net/http包编写一个最简单的Web服务器: package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", index) log.Fatal(http.ListenAndServe("localhost:8000", nil)) } func index(w htt...
gomock是Go官方提供的模拟(mock)框架,提供了打桩和验证调用的功能 mockgen工具用于针对接口生成mock对象代码(不能mock单独的函数或方法) GitHub仓库:https://github.com/golang/mock 安装 go get github.com/golang/mock/gomock go get github.com/golang/mock/moc...