第三周总结

发布于: 21 小时前
第三周总结

本周主要学习设计模式,并讲了几种模式在junit和Spring和老师实现的HQL中的使用。

什么是设计模式

每一种模式都描述了一种问题的通用解决方案。

设计模式是一种可重复使用的解决方案。

单例模式

单例中的成员变量是多线程重用的,可能会产生意想不到的结果,因此尽量将单例设计为无状态对象(只提供服务,不保存状态)。

模板方法模式

模板方法模式是扩展功能的最基本模式之一

   它是一种 “类的行为模式”

它是通过“继承”的方法来实现扩展

基类负责算法的轮廓和骨架

子类负责算法的具体实现

策略模式

策略模式是扩展功能的另一种最基本的模式

   它是一种 “对象的行为模式”

它是通过“组合”的方法来实现扩展

 

什么时候使用策略模式

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

 

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

 

策略模式的优点

   将使用策略的人与策略的具体实现分离

   策略对象可以自由组合

策略模式可能存在的问题

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

组合模式

   是一种 “对象的结构模式”

 

装饰模式

是一种 “对象的结构模式“

 

装饰器的作用

   在不改变客户端的接口的前提下

扩展现有对象的功能

适配器模式

比较适配器和装饰者

试着写了一下单例模式

public class Singleton1 {

private Singleton1(){

}

private static Singleton1 instance = new Singleton1();

public static Singleton1 getInstance(){

return instance ;

}

}

public class Singleton2 {

private Singleton2(){

}

private static Singleton2 instance = null ;

public static synchronized Singleton2 getInstance(){

if (instance == null){

instance = new Singleton2() ;

}

return instance ;

}

}

试着写了一下课堂上的装饰模式

public interface AnyThing {

void exe();

}

public class Dream implements AnyThing {

private AnyThing a ;

public Dream(AnyThing a){

this.a = a ;

}

public void exe(){

System.out.print("梦装饰了");

a.exe() ;

}

}

public class Moon implements AnyThing{

private AnyThing a ;

public Moon(AnyThing a){

this.a = a ;

}

public void exe(){

System.out.print("明月装饰了");

a.exe() ;

}

}

public class You implements AnyThing{

private AnyThing a ;

public You(AnyThing a){

this.a = a ;

}

public void exe(){

System.out.println("你");

}

}

public class Test {

public static void main(String[] args){

AnyThing t = new Moon(new Dream(new You(null)));

t.exe() ;

t = new Dream(new Moon(new You(null)));

t.exe() ;

}

}

用活设计模式,关键在于关于发现问题,先发现问题再考虑用设计模式去解决问题!

用户头像

Linuxer

关注

还未添加个人签名 2018.06.12 加入

还未添加个人简介

评论

发布
暂无评论
第三周总结