常用设计模式
2017-09-03 22:30
120 查看
一、单例模式
单例模式,最常见的就是饥饿模式和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象。在多线程模式中,考虑到性能和线程安全问题,我们一般选下面两种比较经典的单例模式,在性能提高的同时,又保证了线程安全。(1).static inner class方式单例
(2).double check instance 方式单例
1.静态内部类 方式单例:
public class Singletion { private static class InnerSingletion { private static Singletion single = new Singletion(); } public static Singletion getInstance(){ return InnerSingletion.single; } }
2.双重检索单例:
public class DubbleSingleton { private static DubbleSingleton ds; public static DubbleSingleton getDs(){ if(ds == null){ synchronized (DubbleSingleton.class) { if(ds == null){ ds = new DubbleSingleton(); } } } return ds; } }
饿汉模式:
public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton newInstance(){ return instance; } } 缺点,在类加载之后就被创建,即使没有用到
懒汉模式:
public class Singleton{ private static Singleton instance = null; private Singleton(){} public static synchronized Singleton newInstance(){ if(null == instance){ instance = new Singleton(); } return instance; } }在特定时间加载,延迟加载
二、工厂设计模式
1、工厂方法模式(Factory Method)1.1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。首先看下关系图:
举例如下:(我们举一个发送邮件和短信的例子)
首先,创建二者的共同接口:
public interface Sender { public void Send(); }
其次,创建实现类:
public class MailSender implements Sender { @Override public void Send() { System.out.println("this is mailsender!"); } } public class SmsSender implements Sender { @Override public void Send() { System.out.println("this is sms sender!"); } }
最后,建工厂类:
public class SendFactory { public Sender produce(String type) { if ("mail".equals(type)) { return new MailSender(); } else if ("sms".equals(type)) { return new SmsSender(); } else { System.out.println("请输入正确的类型!"); return null; } } }
我们来测试下:
public class FactoryTest { public static void main(String[] args) { SendFactory factory = new SendFactory(); Sender sender = factory.produce("sms"); sender.Send(); } }
输出:this is sms sender!
三、适配器模式
使用一个现成的类,但是它的接口不完全符合你的需求,我只想要它其中的一个方法,不想覆写其他的方法。
比如,窗体有变大,变小,关闭的行为,但是我现在只需要关闭行为;
package reviewDemo;//适配器模式:只想用其中的某一个方法,用适配器作为中间的过渡 interface Windows{ void max(); void min(); void close(); } //适配器模式,实现接口所有的方法,但是不写方法体! class AdapterWindows implements Windows{ @Override public void max() { } @Override public void min() { } @Override public void close() { } } class MyWindows extends AdapterWindows{ //覆写父类的方法 public void close(){ System.out.println("这个实现的是关闭功能!"); } } public class Demo17 { public static void main(String[] args) { new MyWindows().close(); } }
相关文章推荐
- Android中常用的设计模式
- Objective-C常用设计模式(一)--工厂方法模式
- iOS中常用的几种设计模式
- 游戏开发中常用的设计模式
- PHP中常用的三种设计模式
- Android 内功心法(1)——设计模式的原则和android中常用的模式
- Android 内功心法(1.8)——android常用设计模式之访问者模式
- OC中常用的设计模式
- 常用设计模式理解
- 9种常用的设计模式及7大原则
- 23种设计模式中常用11种(转)
- 最常用的设计模式-----策略模式(C++实现)
- Unity 3D - 常用设计模式之单例
- 软件开发常用设计模式—单例模式总结(c++版)
- adnroid常用的八种设计模式
- javascript常用的设计模式
- 设计模式——Android 常用设计模式之MVP详解及项目实战
- java常用设计模式
- 常用23种设计模式总结,UML图、意图和适用性
- 几种常用的设计模式介绍