zoukankan      html  css  js  c++  java
  • Java设计模式系列3--抽象工厂模式(Abstract Factory Method)

    2014-02-26 10:55:47

    声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢!

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解。

    代码示例:

    Sender接口以及实现类

     1 package com.david.factory;
     2 
     3 public interface Sender {
     4     public void send();
     5 }
     6 
     7 class MailSender implements Sender {
     8 
     9     @Override
    10     public void send() {
    11         System.out.println("This is MailSender!");
    12     }
    13 }
    14 
    15 class SmsSender implements Sender {
    16 
    17     @Override
    18     public void send() {
    19         System.out.println("This is SmsSender!");
    20     }
    21 }

    Provider接口及实现类

     1 package com.david.factory;
     2 
     3 public interface Provider {
     4     public Sender produce();
     5 }
     6 
     7 class MailSenderFactory implements Provider {
     8 
     9     @Override
    10     public Sender produce() {
    11         return new MailSender();
    12     }
    13 
    14 }
    15 
    16 class SmsSenderFactory implements Provider {
    17 
    18     @Override
    19     public Sender produce() {
    20         return new SmsSender();
    21     }
    22 
    23 }

    主程序:

    1 package com.david.factory;
    2 
    3 public class MainTest {
    4     public static void main(String[] args) {
    5         Provider pro = new SmsSenderFactory();
    6         SmsSender sender = (SmsSender) pro.produce();
    7         sender.send();
    8     }
    9 }

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

  • 相关阅读:
    判断操作系统
    Oracle之初体验
    判断PDF文件是否相同(通过二进制流判断)
    jQuery基础 html+css3+jquery 点击按钮切换内容
    Jquery基础,点击事件click,鼠标移入事件mouseover。通过事件改变DOM结构
    Jquery教学基础,简单的淡入淡出,隐藏显示,改变CSS等
    Vuex的高级使用及localStorage
    Vuex实现数据共享
    Vue项目代码结构简单介绍
    Vue项目环境准备
  • 原文地址:https://www.cnblogs.com/wlrhnh/p/3568744.html
Copyright © 2011-2022 走看看