标签:
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.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简单工厂模式举例
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