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

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

    工厂方法模式

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

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

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

    抽象工厂模式:

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

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

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

  • 相关阅读:
    linux编程 给线程起名字
    c语言的__packed__
    LINUX 命令行编辑快捷键
    linux关于bashrc与profile的区别(转)
    linux查看和修改PATH环境变量的方法
    linux 线程 pthread_create 源码 剖析
    你真的了解【HashMap】么?-一
    Oracle 基础概念
    Java数据库连接池
    JVM内存模型与垃圾回收
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11146162.html
Copyright © 2011-2022 走看看