Java学习之:工厂设计模式

普通接口写的设计模式
缺点:每当有新商品产生,都要修改客户端的源代码(主方法需要修改,还需要加新商品类)才能支持新商品
//定义标准
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());
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值