欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习之:工厂设计模式

程序员文章站 2024-01-23 17:57:10
...

普通接口写的设计模式

缺点:每当有新商品产生,都要修改客户端的源代码(主方法需要修改,还需要加新商品类)才能支持新商品
//定义标准
interface Computer{
	void PrintRealComputer();
}
//用户购买(使用标准)
class Client{
	public void buyComputer(Computer computer){
		computer.PrintRealComputer();
	}
}
//实现接口
class MacSurface implements Computer{
	public void PrintRealComputer(){
		System.out.println("buy a macsurface");
	}
}


public class Test1{
	//客户端
	public static void main(String[] args) {
		Client client = new Client();
		client.buyComputer(new MacSurface());
	}
}

1 简单工厂模式-第三方:一个具体的工厂类

(1)解决:

将客户端的new操作 解耦 到工厂类中。每当有新商品产生,无需修改客户端

(2)组成:

1.一个抽象的产品接口(类)
2.多个具体产品类(实现类)
3.一个工厂(生产所有商品)

(3)优点:

1.简单易于实现
2.将类的实例化操作解耦到工厂,无需修改客户端

(4)缺点:

每当有新商品,都要修改工厂类代码,违反了OCP原则

import java.util.Scanner;
//定义标准
interface Computer{
	void PrintRealComputer();
}
//用户购买(使用标准)
class Client{
	public void buyComputer(Computer computer){
		computer.PrintRealComputer();
	}
}
//实现接口
class MacSurface implements Computer{
	public void PrintRealComputer(){
		System.out.println("buy a macsurface");
	}
}

class ComputerFactory{
	public static Computer getInstance(String computerName) {
		if(computerName.equals("mac")){
			return new MacSurface();
		} else 
			return null; 
	}
}


public class Test1{
	//客户端
	public static void main(String[] args) {
		Client client = new Client();
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入你要购买的电脑");
		String computerName =scanner.nextLine();
		
		Computer computer = ComputerFactory.getInstance(computerName);
		client.buyComputer(computer);
	}
}

2 工厂方法模式-多个产品呈现出家族式特点

(1)组成:

1.一个抽象的产品接口(类)
2.多个具体产品类(实现类)
3.一个抽象的工厂接口
4.多个具体工厂类

(2)工厂方法模式是针对每个产品家族提供一个工厂类,在客户端中判断使用哪个家族工厂,使用对应工厂区生产商品。
import java.util.Scanner;
//定义标准
interface Computer{
	void PrintRealComputer();
}
//用户购买(使用标准)
class Client{
	public void buyComputer(Computer computer){
		computer.PrintRealComputer();
	}
}
//实现接口
class MacSurface implements Computer{
	public void PrintRealComputer(){
		System.out.println("buy a macsurface");
	}
}
//接口工厂
interface ComputerFactory{
	Computer createComputer();
}
//实现接口
class MacComputerFactory implements ComputerFactory{
	public Computer createComputer(){
		return new MacSurface();
	}
}


public class Test1{
	//客户端
	public static void main(String[] args) {
		Client client = new Client();
		ComputerFactory cf = new MacComputerFactory();
		client.buyComputer(cf.createComputer());
	}
}
相关标签: JavaSE