您的位置:首页 > 编程语言 > Java开发

java-设计模式(创建型)

2015-04-13 10:41 393 查看
1.[b]工厂方法模式(FactoryMode)[/b]

定义:提供创建对象的接口,方便对象的创建。

1.1 静态工厂方法模式(Static Factory Method Mode)

定义:对于对象的创建,交给工厂类内部的静态方法实现。

使用场景:适用于基类的子类较少时,且基本不会再增加子类时。

坏处,当子类增加时,需要修改工厂类的内部,违背了开闭原则。

基类与子类:

public interface Sender {

void send ();
}

class SenderMail implements Sender
{

@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("发送邮件。");
}

}
class SenderSms implements Sender
{

@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("发送短信。");
}

}


  静态工厂模式:

//静态工厂模式方法:通过工厂内部的方法产生对象。
//缺点:当基类的子类增加时,需要修改工厂类里的方法。
//     违背了开闭原则(增加接口的扩展,减少内部的修改)
class SenderFactory {
public static Sender produceMail()
{
return new SenderMail();
}
public static Sender produceSms()
{
return new SenderSms();
}
}


  测试:

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
Sender mail=SenderFactory.produceMail();
mail.send();
Sender sms=SenderFactory.produceSms();
sms.send();
}

}


  运行:

发送邮件。
发送短信。


2.抽象工厂模式(Abstract Factory)

定义:对于对象的创建,交给抽象工厂的子类工厂去实现。

使用场景:当基类的子类增加时,我可以增加对于的工厂子类去创建对象,符合开闭原则。

抽象工厂:

interface SenderFactory {

Sender produce();
}
class MailSenderFactory implements SenderFactory
{
@Override
public  Sender produce() {
// TODO Auto-generated method stub
return new SenderMail();
}
}
class SmsSenderFactory implements SenderFactory
{
@Override
public   Sender produce() {
// TODO Auto-generated method stub
return new SenderSms();
}
}


  测试:

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
Sender mail=new MailSenderFactory().produce();
mail.send();
Sender sms=new SmsSenderFactory().produce();
sms.send();
}

}


  运行:

发送邮件。
发送短信。


3.单态模式(Singleton)

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:

1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。

2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。

3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

饿汉模式:

//单态设计模式:饿汗式
public class Singleton {
//私有化静态成员变量
private static Singleton instance=new Singleton();

//私有化构造方法
private Singleton()
{
}
//提供获取单例的方法
public static Singleton getInstance()
{
return instance;
}
}


 懒汉模式(保证了线程同步)

//懒汉模式
public class Singleton {

//私有化实例对象,还没创建,当使用时才创建
private static Singleton instance=null;
//私有化构造方法
private Singleton(){

}
//提供创建单例的方法
public static Singleton getInstance()
{
if(instance==null)
{
syninit();
}
return instance;
}
//确保创建单例时线程安全
public static synchronized void syninit()
{
//此处防止其他线程进来后,不知道单例是否已创建,因此判断下
if(instance==null)
instance=new Singleton();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: