写点什么

代码重构 - 设计模式总结

用户头像
Mars
关注
发布于: 2020 年 11 月 08 日

单例模式

单例模式

Singleton 保证一个类产生一个实例。带来好处:

l  单一实例,减少实例频繁创建和销毁带来的资源销毁。

l  多个用户使用该实例,便于统一控制。

饿汉单例实例特点:

l  构造函数私有;

l  通过私有静态成员变量创建;

l  通过公有静态方法返回该实例对象;

懒汉单例实例特点(性能稍差,推荐饿汉单例模式):

l  构造函数私有;

l  通过私有静态成员变量创建,但为 null;

l  通过公有静态方法返回该实例对象,如果实例=null,创建并返回(该方法注意加锁);

 

适配器模式

适配器模式应用场景:1.系统需要使用现有的类,而此类的接口不符合系统的需要。2. 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。3. 通过接口转换,将一个类插入另一个类系中。

优点:1. 可以让任何两个没有关联的类一起运行。2. 提高类的复用

缺点:过多使用,导致明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现。2.由于 java 只能继承一个类,最多只能适配一个适配者类,而目标类必须是抽象类。

l  类适配器

 

l  对象适配器

 

Junit 中设计模式

模板方法模式

扩展功能的基本模式之一,是一种类的行为模式。

其通过继承的方法来实现扩展;1.基类负责算法的轮廓和骨架;2.子类负责算法的具体实现;、

具体模板方法形式:

抽象方法

l  protected abstract void step();

l  强制子类实现该步骤;

具体方法

l  protected void doingsomething(){…}

l  子类不需要覆盖,但也可以覆盖

l  如果明确不要子类覆盖,最好标明:final

钩子方法

l  protected void setup(){}

l  空的实现(缺省适配器模式)

l  子类选择性覆盖,以便在特定时机做些事

 

模板方法实现举例:

servlet 模板方法如下图



策略模式

策略模式是扩展功能的另一种基本模式,它是一种对象的行为模式。

通过组合方法来实现扩展。例如:Junit 包中 testCase 就是策略模式的应用。

何时使用策略模式

1.       系统需要在多种算法中选择一种;

2.       重构系统时,将条件语句转换成对于策略的多态性调用;

 

策略模式优点(对比模板模式)

l  调用策略方与策略的具体实现分离

l  策略对象可以自由组合

策略模式缺点

       策略模式仅仅封装了算法的具体实现,方便添加和替换算法。但它并不关心何时使用算法,这个必须由客户端决定。

组合模式

组合模式是一种对象的结构模式,用于把一组相似的对象当做一个单一的对象,用来表示部分及整体的关系。

使用场景:描述部分及整体层次结构,例如:树形结构;忽略单个对象和组合对象之间区别,统一使用组合对象中的所有对象。

优点:1.高层调用低层。2.节点自由增肌。

缺点:使用组合模式时,部分和整体的声明都是实现类,非接口,违反依赖倒置。



装饰器模式

装饰器模式是一种对象的结构模式

装饰器作用

不改变客户端接口前提下,扩展现有对象功能(对客户端透明)

 


Spring 中设计模式

单例模式

Spring 中单例模式是容器式的单例

public class ContainerSingleton {
    private ContainerSingleton() {
    }
    private static Map<String, Object> beanMap= new ConcurrentHashMap<>();
    public static Object getBean(String className) {        synchronized (beanMap) {            if (!ioc.containsKey(className)) {                Object o = null;                try {                    o = Class.forName(className).newInstance();                    beanMap.put(className, o);                } catch (Exception e) {                    e.printStackTrace();                }                return o;            } else {                return beanMap.get(className);            }        }    }
}
复制代码


Spring MVC 模式

MVC 模式用于应用程序分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。

  • View(视图) - 视图代表模型包含的数据的可视化。

  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。


@RestController@RequestMapping("/test")public class BaseController {
@Autowired UserService userService; @RequestMapping(value = "query") public void hi(String userId) { userServic.getUser(userId); }}
复制代码


发布于: 2020 年 11 月 08 日阅读数: 37
用户头像

Mars

关注

还未添加个人签名 2018.06.12 加入

还未添加个人简介

评论

发布
暂无评论
代码重构-设计模式总结