FactoryMethod
2024-08-26 14:56:58
工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类
工厂方法的简单实现
(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(); }
}
最新文章
- JDK1.8 HashMap 源码分析
- 【Linux学习】Linux操作技巧
- mysql中binlog_format模式与配置详解
- Eclipse调试 : step into,step over,step return 说明
- Linux三剑客之awk
- Swift - UITableViewCell倒计时重用解决方案
- UITableView多选删除
- PHP empty函数判断0返回真还是假?
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
- Hadoop源代码分析
- Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)
- Foundation 框架 归档
- hpu第五届acm比赛
- javascript基础-事件1
- 一起学Linux01之环境安装
- Arduino库函数中文说明
- 帕斯卡(pascal)命名法:
- 132.leecode-Palindrome Partitioning II
- DAY1初识Python----变量及命名规则,注释,数据类型,常量,交互
- python中remove的一些坑
热门文章
- loj2291 「THUSC 2016」补退选
- 云计算之路-阿里云上:用上了开放缓存服务OCS
- 设计模式之第19章-中介者模式(Java实现)
- IOS开发---菜鸟学习之路--(十五)-如何实现拍照功能
- [oldboy-django][2深入django]MVC&;MTV
- JMeter 性能测试进阶实战
- bzoj 2387: [Ceoi2011]Traffic
- 糗事百科python爬虫
- 如何在vue里实现同步阻塞请求,请求完成之前不加载页面或组件?
- 勒索病毒 -- “永恒之蓝”NSA 武器免疫工具