2.FactoryMethod-工厂方法模式

来源:互联网 发布:常州智能网络地板厂家 编辑:程序博客网 时间:2024/04/29 15:23

Factory Method 工厂方法模式

  • 工厂方法模式:

    1. 核心,定义一个创建对象的接口/抽象类,让子类来决定实例化哪一个类,使实例化延迟到子类。
      当有新的产品产生时,只要按照产品接口和工厂接口来生成,就可以被客户端使用,而不必改码.
      所以工厂方法模式是完全符合开闭原则的。
    2. 工厂方法克服了简单工厂违背开放封闭原则的缺点,又保持了封装对象创建过程的优点。
      降低了客户程序和产品对象之间的耦合。
  • 示例类图:
    FactoryMethod_uml

  • 示例代码:

// 产品public interface Sender {    public void send(String msg);}//具体产品public class MailSender implements Sender {    @Override    public void send(String msg) {        System.out.println("MailSender send : " + msg);    }}public class SmsSender implements Sender {    @Override    public void send(String msg) {        System.out.println("SmsSender  send : " + msg);    }}// 定义一个创建对象的接口,让子类来决定实例化哪一个类,使实例化延迟到子类。public interface SenderFactory {    public Sender getSender();}//具体工厂(每个具体工厂负责一个具体产品)public class MailSenderFactory implements SenderFactory {    @Override    public Sender getSender() {        return new SmsSender();    }}public class SmsSenderFactory implements SenderFactory{    @Override    public Sender getSender() {        return new MailSender();    }}// 测试public class FactoryTest {    public static void main(String[] args) {        FactoryMethod();    }    // 工厂方法模式测试    public static void FactoryMethod() {        SenderFactory senderFactory = new MailSenderFactory();        Sender sender = senderFactory.getSender();        sender.send("MailSenderFactory");        new SmsSenderFactory().getSender().send("SmsSenderFactory");    }}

工厂方法是简单工厂的进一步抽象和推广,由于使用了多态性,所以每增加一个产品就要增加一个对应的产品工厂类,增加了额外的开发量。
当产品种类非常多时,就会出现大量的与之对应的工厂类,使用简单工厂模式与工厂方法模式相结合的方式可以减少工厂类:
即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。

0 0
原创粉丝点击