java 工厂模式
来源:互联网 发布:微软程序员年薪 编辑:程序博客网 时间:2024/06/05 10:15
- 简单工厂模式 又称静态工厂模式
- 产品接口
- 产品的具体实现
- 工厂类(通过不同的标志 生产不同的产品)
public class SimpleFactory
{
public static void main(String[] args)
{
Factory.produce("A");
Factory.produce("B");
}
}
{
public static void main(String[] args)
{
Factory.produce("A");
Factory.produce("B");
}
}
// =======================产品============================
interface Product
{
}
class ProductA implements Product
{
public ProductA()
{
System.out.println("产品A");
}
}
class ProductB implements Product
{
public ProductB()
{
System.out.println("产品B");
}
}
{
}
class ProductA implements Product
{
public ProductA()
{
System.out.println("产品A");
}
}
class ProductB implements Product
{
public ProductB()
{
System.out.println("产品B");
}
}
// ==================工厂==========================
class Factory
{
public static Product produce(String type)
{
if (type.equals("A"))
return new ProductA();
else if (type.equals("B"))
return new ProductB();
else
return null;
}
}
{
public static Product produce(String type)
{
if (type.equals("A"))
return new ProductA();
else if (type.equals("B"))
return new ProductB();
else
return null;
}
}
- 工厂方法模式
- 产品接口(单个)
- 产品实现类
- 工厂接口(单个)
- 工厂实现类(有多个工厂实现类,但每个工厂实现类只能生产单个产品)
public class FactoryMethod
{
public static void main(String[] args)
{
Factory factoryA = new FactoryA();
factoryA.produce();
Factory factoryB = new FactoryB();
factoryB.produce();
}
}
{
public static void main(String[] args)
{
Factory factoryA = new FactoryA();
factoryA.produce();
Factory factoryB = new FactoryB();
factoryB.produce();
}
}
// =======================产品============================
interface Product
{
}
class ProductA implements Product
{
public ProductA()
{
System.out.println("产品A");
}
}
class ProductB implements Product
{
public ProductB()
{
System.out.println("产品B");
}
}
interface Product
{
}
class ProductA implements Product
{
public ProductA()
{
System.out.println("产品A");
}
}
class ProductB implements Product
{
public ProductB()
{
System.out.println("产品B");
}
}
// ======================工厂==============================
interface Factory
{
public Product produce();
}
class FactoryA implements Factory
{
@Override
public ProductA produce()
{
return new ProductA();
}
}
class FactoryB implements Factory
{
@Override
public ProductB produce()
{
return new ProductB();
}
}
{
public Product produce();
}
class FactoryA implements Factory
{
@Override
public ProductA produce()
{
return new ProductA();
}
}
class FactoryB implements Factory
{
@Override
public ProductB produce()
{
return new ProductB();
}
}
- 抽象工厂模式
- 产品接口(可以有多个产品接口)
- 产品实现类
- 工厂接口(只有一个)
- 工厂实现类(有多个工厂实现类,且每个实现类可以生产多种产品)
public class AbstractFactory
{
public static void main(String[] args)
{
Factory unixFactory = new UnixFactory();
Button unixBtn = unixFactory.createButton();
unixBtn.click();
Text unicText = unixFactory.createText();
unicText.write();
Factory windowsFactory = new WindowsFactory();
Button windowsBtn = windowsFactory.createButton();
windowsBtn.click();
Text windowsText = windowsFactory.createText();
windowsText.write();
}
}
{
public static void main(String[] args)
{
Factory unixFactory = new UnixFactory();
Button unixBtn = unixFactory.createButton();
unixBtn.click();
Text unicText = unixFactory.createText();
unicText.write();
Factory windowsFactory = new WindowsFactory();
Button windowsBtn = windowsFactory.createButton();
windowsBtn.click();
Text windowsText = windowsFactory.createText();
windowsText.write();
}
}
// ======================产品Button=================
interface Button
{
public void click();
}
class UnixButton implements Button
{
@Override
public void click()
{
System.out.println("unix button clicked!");
}
}
class WindowsButton implements Button
{
public void click()
{
System.out.println("windows button clicked!");
}
}
{
public void click();
}
class UnixButton implements Button
{
@Override
public void click()
{
System.out.println("unix button clicked!");
}
}
class WindowsButton implements Button
{
public void click()
{
System.out.println("windows button clicked!");
}
}
// ======================产品Text=================
interface Text
{
public void write();
}
class UnixText implements Text
{
@Override
public void write()
{
System.out.println("unix Text writed!");
}
}
class WindowsText implements Text
{
@Override
public void write()
{
System.out.println("windows Text writed!");
}
}
{
public void write();
}
class UnixText implements Text
{
@Override
public void write()
{
System.out.println("unix Text writed!");
}
}
class WindowsText implements Text
{
@Override
public void write()
{
System.out.println("windows Text writed!");
}
}
// ===========================工厂类========================
interface Factory
{
public Button createButton();
public Text createText();
}
class UnixFactory implements Factory
{
@Override
public Button createButton()
{
return new UnixButton();
}
@Override
public Text createText()
{
return new UnixText();
}
}
class WindowsFactory implements Factory
{
@Override
public Button createButton()
{
return new WindowsButton();
}
@Override
public Text createText()
{
return new WindowsText();
}
}
{
public Button createButton();
public Text createText();
}
class UnixFactory implements Factory
{
@Override
public Button createButton()
{
return new UnixButton();
}
@Override
public Text createText()
{
return new UnixText();
}
}
class WindowsFactory implements Factory
{
@Override
public Button createButton()
{
return new WindowsButton();
}
@Override
public Text createText()
{
return new WindowsText();
}
}
- 区别
工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
两者皆可。
1 0
- java工厂模式-简单工厂,工厂方法,抽象工厂模式
- Java工厂模式之简单工厂模式
- java中的工厂模式(简单工厂模式+工厂方法模式)
- 工厂模式(工厂方法模式,抽象工厂模式) Java
- java的工厂模式
- java工厂模式
- java工厂模式
- java 设计工厂模式
- Java 工厂模式设计
- Java工厂模式
- Java工厂模式
- Java工厂模式
- JAVA工厂模式详解
- java 工厂模式
- Java工厂模式
- java抽象工厂模式
- Java的工厂模式
- java主题:工厂模式
- Liferay 6.1开发学习(一):环境搭建
- 2016-IT名企研发类面经汇总
- Storage Access Framework
- VMware的安装和使用
- 可以计算阶乘次方的大数计算器
- java 工厂模式
- 【java集合框架源码剖析系列】java源码剖析之LinkedList
- C++成员变量的初始化顺序问题
- Hibernate的事务控制机制
- Hibernate方法模拟
- Liferay 6.1开发学习(二):创建一个Portlet工程
- 初识angularJs
- HDFS工作原理
- JAVAEE学习查询