设计模式1(工厂模式)

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


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





你可能感兴趣的:(java,设计模式)