设计模式1(工厂模式)

来源:互联网 发布:软件研发周报 编辑:程序博客网 时间:2024/05/10 20:13

转载:http://blog.csdn.net/zhangerqing

设计模式(Design Patterns)

       可复用面向对象软件的基础

1.设计模式:反复使用,为多数人知晓的,经过分类编目的,代码设计的总结

2.可重用代码,让代码更容易让人理解,保证代码的可靠性,使代码编程工程化

3.设计模式的分类:

 3.1创建型模型:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式

3.2结构型模型:适配器模式,装饰器模式,代理模式,外观者模式,桥接模式,组合模式,享元模式

3.3行为性模型:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命令模式,备忘录模式,状态模式,访问者模式,中介者模式,解释器模式

3.4并发型模式,线程池模式

4.1工厂方法模型(Factory Method)

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

4.1.2多个工厂方法模式:对普通工厂方法模式的改进,在普通工厂方法的模式中,如果传递的字符串出错,则不能正确的创建对象,而多个工厂方法模式则提供了多个工厂方法,分别创建对象:

 public Sender produceMail(){          return new MailSender();      }            public Sender produceSms(){          return new SmsSender();      }  }  
测试类如下:

public class FactoryTest {        public static void main(String[] args) {          SendFactory factory = new SendFactory();          Sender sender = factory.produceMail();          sender.Send();      }  }  


4.1.3静态工厂方法模式:将多个工厂方法模式里面的方法置为静态,不需要创建实例,直接调用即可

public class SendFactory {            public static Sender produceMail(){          return new MailSender();      }            public static Sender produceSms(){          return new SmsSender();      }  }  public class FactoryTest {        public static void main(String[] args) {              Sender sender = SendFactory.produceMail();          sender.Send();      }  }  


总体来说,工厂模式适合的情况:凡事出现大量的产品需要创建的时候,并具有共同的接口,可以通过工厂方法进行创建,在以上的三种模式中,如果第一种传入的字符串有误的话,将不能正确的创建对象,第三种相对于第二种则不需要创建工厂类,所以大多数的情况下会选择第三种设计模式----静态工厂方法模式