zoukankan      html  css  js  c++  java
  • 设计模式---工厂模式和抽象工厂模式

    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.抽象工厂模式

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

    工厂方法模式

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

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

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

    抽象工厂模式:

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

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

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

  • 相关阅读:
    sublimeformaya
    sitecustomize.py 用法
    计蒜客之矩阵翻转
    计蒜客之判断质数
    计蒜客之斐波那契数列
    LTE 测试文档(翻译)
    Manual——Test (翻译1)
    LTE Manual ——Logging(翻译)
    嵌入式linux的学习之路[转]
    C语言预处理程序[转]
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11146162.html
Copyright © 2011-2022 走看看