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

设计模式总结

时间:2016-05-03 18:06:53      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

1,单例模式

1.1什么是单例模式

保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个

1.2单例模式类图

技术分享

1.3单例模式的实现方法

饿汉式

6
7
8
9
10
11
12
13
14
15
16

public class Singleton{
    //在自己内部定义自己的一个实例,只供内部调用
    private static final Singleton instance = new Singleton();
    private Singleton(){
        //do something
    }
    //这里提供了一个供外部访问本class的静态方法,可以直接访问
    public static Singleton getInstance(){
        return instance;
    }
}
懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SingletonClass{
    private static SingletonClass instance=null;
    public static synchronized SingletonClass getInstance()
    {
        if(instance==null)
        {
               instance=new SingletonClass();
        }
        return instance;
    }
    private SingletonClass(){
    }
}
加锁懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

public class Singleton{
    private static Singleton instance=null;
    private Singleton(){
        //do something
    }
    public static Singleton getInstance(){
        if(instance==null){
            synchronized(Singleton.class){
                if(null==instance){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}
2,适配器模式

2.1什么是适配器模式

将一个已经存在的类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作

适配器会涉及到三个类,一个目标接口,一个需要适配的类,和一个适配器类,通过关联关系将需要被适配的类放入适配器类中,然后让适配器实现目标接口,这样目标接口就可以通过适配器类调用 其中的方法

2.2适配器类图

技术分享

2.3适配器举例

// 目标接口,或称为标准接口
interface Target {
	public void request();
}

// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
class Adaptee {
	public void specificRequest() {
		System.out.println("被适配类具有 特殊功能...");
	}
}

// 适配器类,直接关联被适配类,同时实现标准接口
class Adapter implements Target{
	// 直接关联被适配类
	private Adaptee adaptee;
	
	// 可以通过构造函数传入具体需要适配的被适配类对象
	public Adapter (Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	
	public void request() {
		// 这里是使用委托的方式完成特殊功能
		this.adaptee.specificRequest();
	}
}


// 测试类
public class Client {
	public static void main(String[] args) {
		// 使用特殊功能类,即适配类,
		// 需要先创建一个被适配类的对象作为参数
		Target adapter = new Adapter(new Adaptee());
		adapter.request();
	}
}
3,观察者模式

3.1什么是观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己

3.2观察者模式类图

技术分享

技术分享
技术分享
技术分享
技术分享

3.3观察者模式举例

//抽象观察者角色
public interface Watcher
{
    public void update(String str);

}



//具体观察者角色
public class ConcreteWatcher implements Watcher
{

    @Override
    public void update(String str)
    {
        System.out.println(str);
    }

}



//抽象主题角色,watched:被观察
public interface Watched
{
    public void addWatcher(Watcher watcher);

    public void removeWatcher(Watcher watcher);

    public void notifyWatchers(String str);

}

//具体主题角色,watched:被观察
public class ConcreteWatched implements Watched
{
    // 存放观察者
    private List<Watcher> list = new ArrayList<Watcher>();

    @Override
    public void addWatcher(Watcher watcher)
    {
        list.add(watcher);
    }

    @Override
    public void removeWatcher(Watcher watcher)
    {
        list.remove(watcher);
    }

    @Override
    public void notifyWatchers(String str)
    {
        // 自动调用实际上是主题进行调用的
        for (Watcher watcher : list)
        {
            watcher.update(str);
        }
    }

}

//测试类
public class Test
{
    public static void main(String[] args)
    {
        Watched girl = new ConcreteWatched();
        
        Watcher watcher1 = new ConcreteWatcher();
        Watcher watcher2 = new ConcreteWatcher();
        Watcher watcher3 = new ConcreteWatcher();
        
        girl.addWatcher(watcher1);
        girl.addWatcher(watcher2);
        girl.addWatcher(watcher3);
        
        girl.notifyWatchers("开心");
    }

}

4,简单工厂模式

4.1什么是简单工厂模式

简单工厂类有一个生产实例的方法,这个方法会根据传入的参数生产相应的实例

4.2简单工厂模式类图

技术分享

4.3简单工厂模式举例

  1. class OperationFactory
  2. {
  3. public static Operation createOperate(string operate)
  4. {
  5.     Operation oper = null;
  6.     switch (operate)
  7.     {
  8.         case "+":
  9.             {
  10.             oper = new OperationAdd();
  11.             break;
  12.             }
  13.         case "-":
  14.             {
  15.             oper = new OperationSub();
  16.             break;
  17.             }
  18.         case "*":
  19.             {
  20.             oper = new OperationMul();
  21.             break;
  22.             }
  23.         case "/":
  24.             {
  25.             oper = new OperationDiv();
  26.             break;
  27.             }
  28.     }
  29.     return oper;
  30. }
  31. }
  32. }
客户端测试类

oper=OperationFactory.createOperate("+");

oper.NumberA=1;

oper.NumberB=2;

double result=oper.GetResult();

5,工厂方法模式

5.1什么是工厂方法模式

工厂方法模式中每一个产品都有相应的工厂,从不同的工厂可以得到不同的实例。工厂方法模式遵循了 对扩展开发-对修改关闭 的原则

创建不同的工厂实例,生产相应的实例对象。

5.2工厂方法模式类图

技术分享

5.3工厂方法模式举例

技术分享

6,抽象工厂模式

6.1什么是抽象工厂模式

一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例

6.2抽象工厂模式类图

技术分享

6.3抽象工厂模式举例

//IDepartment

 技术分享

//IUser

技术分享

技术分享

//IFactory

技术分享

技术分享


工厂方法模式:

 一个抽象工厂类,可以派生出多个具体工厂类。

每个具体工厂类只能创建一个具体产品类的实例。 

只有一个抽象产品类,可以派生出多个具体产品类。   
                                
                      
抽象工厂模式:

  一个抽象工厂类,可以派生出多个具体工厂类。 

 每个具体工厂类可以创建多个具体产品类的实例。 

有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 
                            
                             
区别:

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式的具体工厂类可以创建多个。

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。


设计模式总结

标签:

原文地址:http://blog.csdn.net/u011617742/article/details/51303606

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