文档章节

《设计模式系列》---工厂方法

stefanzhlg
 stefanzhlg
发布于 2014/08/29 17:09
字数 392
阅读 11
收藏 0

 简单工厂vs工厂方法
 简单工厂模式的最大优点在于工厂类中包含了必要的判断逻辑,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
  工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化那个类,工厂方法使一个类的实例化延迟到其子类。工厂方法模式实现时,客户端决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你要想加功能,本来是改工厂类的,现在是修改客户端。

/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:54:36
 */
public interface IFactory {

    Leifeng createLeiFeng();
}
/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:52:41
 */
public class Leifeng {

    public void Sweep() {
        System.out.println("扫地");
    }

    public void Wash() {
        System.out.println("洗衣");
    }
}
/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:53:48
 */
public class Undergraduate extends Leifeng {

}
/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:55:25
 */
public class UndergraduateFactory implements IFactory {

    /*
     * (non-Javadoc)
     * 
     * @see us.echo.pattern.factory.IFactory#createLeiFeng()
     */
    @Override
    public Leifeng createLeiFeng() {
        return new Undergraduate();
    }

}
/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:53:48
 */
public class Volunteer extends Leifeng {

}
/**
 * @author stefanie zhao
 * @date 2014-8-15 下午01:55:25
 */
public class VolunteerFactory implements IFactory {

    /*
     * (non-Javadoc)
     * 
     * @see us.echo.pattern.factory.IFactory#createLeiFeng()
     */
    @Override
    public Leifeng createLeiFeng() {
        return new Volunteer();
    }

}
public class Main {

    /**
     * @Description: TODO
     * @param @param args
     * @return void
     * @throws
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        IFactory factory = new UndergraduateFactory();
        Leifeng lf = factory.createLeiFeng();
        lf.Sweep();
        lf.Wash();
    }

}


© 著作权归作者所有

stefanzhlg

stefanzhlg

粉丝 65
博文 110
码字总数 85559
作品 4
浦东
程序员
私信 提问
【设计模式系列】浅析观察者模式

观察者<Observer>模式(有时又被称为发布-订阅<Publish/Subscribe>模式、模型-视图<Model/View>模式、源-收听者<Source/Listener>模式或从属者<Dependents>模式)是软件设计模式的一种。在此......

磊神Ray
2011/10/18
0
0
Spring使用静态工厂方法创建Bean

使用静态工厂方法创建Bean 使用静态工厂方法创建Bean实例时,class属性也必须指定,但此时class属性并不是指定Bean实例的实现类,而是静态工厂类。因为Spring需要知道是用哪个工厂来创建Bea...

摆渡者
2014/03/04
0
4
设计模式学习笔记-工厂模式

工厂模式 设计模式学习笔记-工厂模式 交流或更多内容请关注我的公众号:nezha_blog 我的技术博客:https://nezha.github.io 微信公众号 介绍简单工厂模式之前先通过一个披萨项目的例子来引出...

哪吒小子
2017/12/08
0
0
iOS设计模式——抽象工厂

何为抽象工厂? 抽象工厂提供一个固定的接口,用于创建一系列有关联或相依存的对象,而不必指定其具体类或其创建的细节。客户端与从工厂得到的具体对象之间没有耦合。 抽象工厂与工厂方法模式...

国士梅花
2015/09/06
392
0
java设计模式 - 工厂模式

一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类: 1)简单工厂模式(Simple Factory):不...

李序锴
2017/11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

GMTC2019|闲鱼-基于Flutter的架构演进与创新

作者:闲鱼技术-宗心 2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地。未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 ...

阿里云云栖社区
29分钟前
3
0
迪蒙人工智能共享停车吸引国际关注

  近来,华为创始人任正非多次提及人工智能。即便在华为生死攸关的关键时刻,任正非依旧不忘强调教育的重要性,“如果不重视教育,实际上我们会重返贫穷的,因为这个社会,最终是要走向人工智能的...

琴殇的
31分钟前
1
0
iOS开发之EventKitUI框架的应用

iOS开发之EventKitUI框架的应用 前面博客,有介绍EventKit这个框架的使用,使用EventKit可以与系统的日历和提醒应用进行交互,读写用户的日程事件。EventKitUI,顾名思义,其实基于EventKit框...

珲少
39分钟前
0
0
从MySQL源码看其网络IO模型

从MySQL源码看其网络IO模型 前言 MySQL是当今最流行的开源数据库,阅读其源码是一件大有裨益的事情(虽然其代码感觉比较凌乱)。而笔者阅读一个Server源码的习惯就是先从其网络IO模型看起。于是...

无毁的湖光-Al
39分钟前
0
0
WebService学习笔记

什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self-contained)并可自我描述 Web Services 可通过使用UDDI来发现 Web Serv...

榴莲黑芝麻糊
56分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部