码迷,mamicode.com
首页 > 编程语言 > 详细

java-设计模式(创建型)-【工厂模式】

时间:2015-04-13 10:50:43      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

1.FactoryMode(工厂模式)

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

2.静态工厂方法模式(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();
	}

}

  运行:

发送邮件。
发送短信。

 3.抽象工厂模式(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();
	}

}

  运行:

发送邮件。
发送短信。

  

 

 

 

 

 

 

      

java-设计模式(创建型)-【工厂模式】

标签:

原文地址:http://www.cnblogs.com/beyondbycyx/p/4421551.html

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