码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式

时间:2015-04-23 21:35:02      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:


1  单例模式(Singleton)

          表示一个类只会生成唯一的一个对象.(第二十五讲)
 
  1. public class SingletonTest
  2. {
  3. public static void main(String[] args)
  4. {
  5. Singleton singleton = Singleton.getInstance();
  6. Singleton singleton2 = Singleton.getInstance();
  7. System.out.println(singleton == singleton2);
  8. }
  9. }
  10. class Singleton
  11. {
  12. private static Singleton singleton;
  13. private Singleton() //只能在内部new
  14. {
  15. }
  16. public static Singleton getInstance()
  17. {
  18. if(singleton == null)
  19. {
  20. singleton = new Singleton();
  21. }
  22. return singleton;
  23. }
  24. }
   将构造函数设置为private ,在类的 外部不能new 对象,但能在类的内部new 对象。使用static 方法属于类,类的方法来生成对象。
使用static 使外部不用生成对象 使用类就能调用。而引用设置为static, 因为static方法只能访问static 变量。
  1. class Singleton
  2. {
  3. private static Singleton singleton=new Singleton();;
  4. private Singleton()
  5. {
  6. }
  7. public static Singleton getInstance()
  8. {
  9. return singleton;
  10. }
  11. }
 Q:   实现2,同样能够实现单例模式,  在多线程下两种的实现不一样 

2 策略模式


     策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
       
   这个模式涉及到三个角色
 
  ●  环境(Context)角色:持有一个Strategy的引用。
 
  ●  抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
 
  ●  具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。


TreeMap 中策略模式:   在TreeMap或者TreeSet中 对象是有序的,所以在创建TreeMap 时候必须指定一个比较器,确定对象的大小来排序。
不同的对象 我们可能会有不同的排序规则, 所以抽象出了Comparator 接口  ,这是一个比较器即抽象策略。我们为不同的类实现这个接口,
具体策略。(如我们为Person类按照ID比较大小,Student类按照名字比较大小)。 TreeMap 即 环境角色。在TreeMap 中包含了一个comparator类型的对象(比较器),当我们使用TreeMap存储时传入自己的比较器,按照此规则排序,TreeMap的add方法会调用此策略来实现。

策略模式的编写步骤
  1. 对策略对象定义一个公共接口。  --抽象策略
  2. 编写策略类,该类实现了上面的公共接口  --具体策略
  3. 在使用策略对象的类中保存一个对策略对象的引用--环境角色
  4. 在使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值  --环境角色中对策略改变/初始化

策略模式的缺点
        1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
        2.造成很多的策略类。
























附件列表

     

    设计模式

    标签:

    原文地址:http://www.cnblogs.com/yuan7712/p/4451731.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!