标签:
1 单例模式(Singleton)
表示一个类只会生成唯一的一个对象.(第二十五讲)
public class SingletonTest
{
public static void main(String[] args)
{
Singleton singleton = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton == singleton2);
}
}
class Singleton
{
private static Singleton singleton;
private Singleton() //只能在内部new
{
}
public static Singleton getInstance()
{
if(singleton == null)
{
singleton = new Singleton();
}
return singleton;
}
}
将构造函数设置为private ,在类的 外部不能new 对象,但能在类的内部new 对象。使用static 方法属于类,类的方法来生成对象。
使用static 使外部不用生成对象 使用类就能调用。而引用设置为static, 因为static方法只能访问static 变量。
class Singleton
{
private static Singleton singleton=new Singleton();;
private Singleton()
{
}
public static Singleton getInstance()
{
return singleton;
}
}
Q: 实现2,同样能够实现单例模式, 在多线程下两种的实现不一样
2 策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
这个模式涉及到三个角色:
● 环境(Context)角色:持有一个Strategy的引用。
● 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
● 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
TreeMap 中策略模式: 在TreeMap或者TreeSet中 对象是有序的,所以在创建TreeMap 时候必须指定一个比较器,确定对象的大小来排序。
不同的对象 我们可能会有不同的排序规则, 所以抽象出了Comparator 接口 ,这是一个比较器即抽象策略。我们为不同的类实现这个接口,
即具体策略。(如我们为Person类按照ID比较大小,Student类按照名字比较大小)。 TreeMap 即 环境角色。在TreeMap 中包含了一个comparator类型的对象(比较器),当我们使用TreeMap存储时传入自己的比较器,按照此规则排序,TreeMap的add方法会调用此策略来实现。
策略模式的编写步骤
- 对策略对象定义一个公共接口。 --抽象策略
- 编写策略类,该类实现了上面的公共接口 --具体策略
- 在使用策略对象的类中保存一个对策略对象的引用--环境角色
在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值 --环境角色中对策略改变/初始化
策略模式的缺点
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2.造成很多的策略类。
设计模式
标签:
原文地址:http://www.cnblogs.com/yuan7712/p/4451731.html