工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类

工厂方法的简单实现

(1)创建简单的产品接口

/**
* 创建产品接口
* @author Administrator
*
*/
interface Fruit{
//产品的共性方法
public void productMethod();
}

(2)创建具体的产品实现类

/**
* 创建产品类
* @author Administrator
*
*/
class Apple implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("apple");
} }
/**
* 创建产品类
* @author Administrator
*
*/
class Banana implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("banana");
} }

(3)创建工厂接口

/**
* 工厂接口
* @author Administrator
*
*/
interface FruitFactory{
/**
* 生产产品
* @return
*/
public Fruit createProduct(String type);
}

(4)创建具体的工厂

/**
* 具体的工厂类
* @author Administrator
*
*/
class SouthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit;
}
}
/**
* 具体的工厂类
* @author Administrator
*
*/
class NorthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit; }
}

(5)模拟客户端的实现

/**
* 模拟客户端
* @author Administrator
*
*/
public class Client{
public static void main(String[] args)
{
//创建工厂对象
FruitFactory factory =new SouthFactory();
//生产产品
Fruit product=factory.createProduct("apple");
//调用产品的方法
product.productMethod(); }
}

如果客户想得到一个南方的苹果,则需要告诉南方工厂,要一个苹果即可。

第一步:建立南方的工厂

第二步:有南方的工厂创建一个苹果

第三步:即可调用苹果中的产品了~

完整代码(完整代码中可以把这些类接口全放在一个java文件中,方便观察,当然,放在多个文件中也是可以的)

package com.songyan.designpattern;
/**
* 创建产品接口
* @author Administrator
*
*/
interface Fruit{
//产品的共性方法
public void productMethod();
} /**
* 创建产品类
* @author Administrator
*
*/
class Apple implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("apple");
} } /**
* 创建产品类
* @author Administrator
*
*/
class Banana implements Fruit{
/**
* 产品方法的具体实现
*/
@Override
public void productMethod()
{
System.out.println("banana");
} } /**
* 工厂接口
* @author Administrator
*
*/
interface FruitFactory{
/**
* 生产产品
* @return
*/
public Fruit createProduct(String type);
} /**
* 具体的工厂类
* @author Administrator
*
*/
class SouthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit;
}
} /**
* 具体的工厂类
* @author Administrator
*
*/
class NorthFactory implements FruitFactory
{
/**
* 生产产品
*/
@Override
public Fruit createProduct(String type)
{
Fruit fruit= null;
if("apple".equals(type))
{
fruit=new Apple();
}
else if("banana".equals(type))
{
fruit=new Banana();
}
return fruit; }
} /**
* 模拟客户端
* @author Administrator
*
*/
public class Client{
public static void main(String[] args)
{
//创建工厂对象
FruitFactory factory =new SouthFactory();
//生产产品
Fruit product=factory.createProduct("apple");
//调用产品的方法
product.productMethod(); }
}

最新文章

  1. JDK1.8 HashMap 源码分析
  2. 【Linux学习】Linux操作技巧
  3. mysql中binlog_format模式与配置详解
  4. Eclipse调试 : step into,step over,step return 说明
  5. Linux三剑客之awk
  6. Swift - UITableViewCell倒计时重用解决方案
  7. UITableView多选删除
  8. PHP empty函数判断0返回真还是假?
  9. jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
  10. Hadoop源代码分析
  11. Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)
  12. Foundation 框架 归档
  13. hpu第五届acm比赛
  14. javascript基础-事件1
  15. 一起学Linux01之环境安装
  16. Arduino库函数中文说明
  17. 帕斯卡(pascal)命名法:
  18. 132.leecode-Palindrome Partitioning II
  19. DAY1初识Python----变量及命名规则,注释,数据类型,常量,交互
  20. python中remove的一些坑

热门文章

  1. loj2291 「THUSC 2016」补退选
  2. 云计算之路-阿里云上:用上了开放缓存服务OCS
  3. 设计模式之第19章-中介者模式(Java实现)
  4. IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能
  5. [oldboy-django][2深入django]MVC&MTV
  6. JMeter 性能测试进阶实战
  7. bzoj 2387: [Ceoi2011]Traffic
  8. 糗事百科python爬虫
  9. 如何在vue里实现同步阻塞请求,请求完成之前不加载页面或组件?
  10. 勒索病毒 -- “永恒之蓝”NSA 武器免疫工具