java-设计模式(创建型)

1.工厂方法模式(FactoryMode)

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

 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();
	}
}

      

posted @ 2015-04-13 10:41  beyondbycyx  阅读(181)  评论(0编辑  收藏  举报