设计模式学习笔记:02简单 工厂模式

由一个工厂对象决定创建出哪一种产品类的实例,属于创建型模式。

定义发送接口

public interface Sender {
     public void Send(); 
}

以及实现的两个发送短信 和发送邮件

public class MailSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is mail  sender!");
    }
}

发送短信

public class SmsSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is sms sender!");
    }
}

建造工厂, 一般写法:

public class NormalFactory {
    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) {
    normalFactory();
//  multiFactory();
//  staticFactory();
    }

// 一般写法
private static void normalFactory() {
    NormalFactory factory = new NormalFactory();
    Sender sender = factory.produce("sms");
    sender.Send();
    }

// 多个工厂方法模式
private static void multiFactory() {
    MultiFactory factory = new MultiFactory();
    Sender sender = factory.produceMail();
    sender.Send();
    }

// 静态 工厂
private static void staticFactory() {
    Sender sender = StaticFactory.produceMail();
    sender.Send();
    }
}

当然,产品多了这样写没效率,使用 多个工厂方法模式

public class MultiFactory {
public Sender produceMail() {
    return new MailSender();
    }

public Sender produceSms() {
    return new SmsSender();
    }
}

或者 使用 静态方式

 public class StaticFactory {
        public static Sender produceMail() {
            return new MailSender();
            }

            public static Sender produceSms() {
            return new SmsSender();
        }
}

调用方法在测试类,使用场景的理解:
比如不同模块对网络请求,可以把 使用静态方式创造不同模块的 网络请求实现 。工厂类始终返回的是这个抽象类,这样如果对原有功能进行更改或是新添加新的功能,也不会对原来的其他类做修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,828评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,957评论 25 709
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,346评论 3 14
  • 前言 历经两个月,我终于完成了第一个C端项目全民星跑,整个工程总共8万行代码(包含注释行).作为强迫症的我把这个项...
    神经骚栋阅读 7,590评论 15 53
  • 在今天之前,从没有哪一天让我对冬至节的认识有如此深刻。 一早第一次打开手机时,扑面而来的是这样一条微信:“冬至是2...
    王小唐阅读 1,540评论 3 4

友情链接更多精彩内容