设计模式---工厂模式和抽象工厂模式

2.工厂方法模式(Factory Method)

  简单工厂模式的一个缺点就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以 ,从设计角度考虑,有一定的问题。此时就用到工厂方法模式创建一个工厂接口和创建多个工厂实现类,这样一旦需要增加新的功能,直接添加新的工厂类就可以了,不需要修改之前的代码。

/*发送邮件的例子*/
//首先,创建二者的共同接口
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 smsSender");
    }
}
//创建工厂接口
public interface Provider{
    public Sender produce();
}
public class SendMailFactory implements Provider{
    public Sender produce(){
        return new MailSender();
    }
}
public class SendSmsFactory implements Provider{
    public Sender produce(){
        return new SmsSender();
    }
}
//工厂模式测试类
public class FactoryTest{
    Provider provider =new SendMailFactory();
    Sender sender=provider.produce();
    sender.send();
}

  这个模式的好处就是,如果你现在想增加一个功能:发及时消息,则只需要做一个实现类,实现Sender接口,同时做一个工厂类,实现Provider接口,就OK,无需去改现有的代码。拓展性较好

3.抽象工厂模式

工厂方法模式和抽象工厂模式不好分清楚,区别如下:

工厂方法模式

  一个抽象产品类,可以派生出多个具体产品类。

  一个抽象工厂类,可以派生出多个具体工厂类。

  每个具体工厂类只能创建一个具体的产品类的实例。

抽象工厂模式:

  多个抽象产品类,每个抽象产品类可以派生出多个具体的产品类。

  一个抽象工厂类,可以派生出多个具体工厂类。

  每个具体工厂类可以创建多个具体产品类的实例,也就是创建的是一个产品线下的多个产品。

posted @ 2019-07-07 14:12  yjxyy  阅读(140)  评论(0编辑  收藏  举报