架构师训练营——第三周学习总结

用户头像
jiangnanage
关注
发布于: 2020 年 06 月 24 日

面向对象的设计模式

设计模式定义

每一种模式都描述了一种问题的通用解决方案;设计模式是一种可以重复使用的解决方案。

设计模式功能分类

创建模式:单例、简单工厂、工厂方法、抽象工厂、生成器、原型模式

结构模式:适配器、桥接、组合、装饰、外观、享元、代理

行为模式:责任链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者、空对象

简单工厂模式

在创建一个对象时不像客户暴露内部细节,并提供一个创建对象的通用接口;把实例化的操作单独放在工厂类中,让工厂来决定应该用哪个具体子类来实例化。

包含元素:公共接口所有子类实现这个接口、工厂类、工厂类中实例化子类方法



public interface Product {
}



public class ConcreteProduct implements Product {
}



public class ConcreteProduct1 implements Product {
}



public class ConcreteProduct2 implements Product {
}



public class SimpleFactory {

public Product createProduct(int type) {
if (type == 1) {
return new ConcreteProduct1();
} else if (type == 2) {
return new ConcreteProduct2();
}
return new ConcreteProduct();
}
}



public class Client {

public static void main(String[] args) {
int type = 1;
Product product;
if (type == 1) {
product = new ConcreteProduct1();
} else if (type == 2) {
product = new ConcreteProduct2();
} else {
product = new ConcreteProduct();
}
// do something with the product
}
}



单例模式

确保一个类只有一个实例,并提供该实例的全局访问点。

包含元素:私有的构造方法、私有的静态变量、公共的静态方法

懒汉模式

public class Singleton {

private static Singleton instance = null;

private Singleton() {
}

public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}



饿汉模式

public class Singleton {

private static Singleton instance = new Singleton();

private Singleton() {
}

public static Singleton getInstance() {
return instance;
}
}



适配器模式

把一个类接口转换成另一个用户需要的接口。

有两种实现方式:类适配器和对象适配器;下图1为类适配器,图2为对象适配器。





模板方法模式

定义算法框架,并将一些具体的实现延迟到子类;通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。



策略模式

定义一系列算法,封装每一个算法,并使他们可以互换;策略模式可以让算法独立于使用它的客户端。

  • Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。

  • Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 Context 所使用的算法。



组合模式

将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。

组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。

组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶子对象。



装饰器模式

为对象动态添加功能。

装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也保留了被装饰者的功能。可以看到,具体组件应当是装饰层次的最低层,因为只有具体组件的方法实现不需要依赖于其它对象。

用户头像

jiangnanage

关注

还未添加个人签名 2019.04.11 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营——第三周学习总结