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());
}
}