设计模式-简单工厂模式/静态工厂方法(Static Factory Method)

使用原因

同一个调用,需要不同对象。统一通过工厂生产不同对象,创建对象的逻辑在工厂中。


定义

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,不属于23种GOF设计模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

优点
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定该创建哪个具体类的对象.通过使用工厂类,外界不需要直接创建对象,直接通过工厂获取需要的对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个 软件体系结构的优化。
缺点
由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。(修改产品改产品,增加产品需要改工厂和产品)

ps.以上内容来自百度百科


示例:

工厂根据传入的数据,生产出相应的对象

//计算方式 工厂类,用于生产相应的算法子类
public class OperationFactory {
	
	public  Operation getOperation(String operator){
		Operation oa = null;
		switch(operator){
			case "+":
				oa = new AddOperation();
				return oa;
			case "-":
				oa = new SubtractOperation();
				return oa;
			/*case "*":
				oa = new MultiplicationOperation();
				return oa;
			case "/":
				oa = new DivisionOperation();
				return oa;*/			
		}
		return null;
	}
}

//算法接口 定义方法
public interface Operation {  
    public double getResult(double numA, double numB);  
} 


//算法实现类,由工厂类创建,重写父类中的虚函数       加减乘除都需要有单独的类
public class AddOperation implements Operation {

	@Override
	public double getResult(double numA, double numB) {
		// TODO Auto-generated method stub
		return numA + numB;
	}

}
........


//测试类
import java.util.Scanner;

public class MainProgream {
	public static void main(String args[]){
		while(true){
			try{
				Scanner input =new Scanner(System.in);
				System.out.println("input numA");
		                String instr = input.nextLine();
		                double numA = Double.parseDouble(instr); 
				System.out.println("input numB");
				instr = input.nextLine();
				double numB = Double.parseDouble(instr);
				System.out.println("input + - * / ");
				instr = input.nextLine();
				String operator = instr;
				System.out.print(numA + operator + numB + "=" );
				Operation o = new OperationFactory().getOperation(operator);
				
				System.out.println(o.getResult(numA, numB));
				
			}catch(Exception e){
				System.out.println("输入格式不对");
			}
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,我可以帮您回答这个问题。首先,工厂方法模式是一种创建型设计模式,它的主要思想是将对象的创建和使用分离,通过一个工厂类来负责对象的创建,并根据不同的需求返回不同的对象实例。而MVC设计模式则是一种架构模式,它的目的是将一个应用程序分成三个基本部分:模型、视图和控制器,从而实现松耦合、高内聚的设计。下面是一段结合工厂方法模式和MVC设计模式的Java代码实现: 1. 工厂方法模式实现部分: ``` public interface Product { void use(); } public class ProductA implements Product { @Override public void use() { System.out.println("Use product A"); } } public class ProductB implements Product { @Override public void use() { System.out.println("Use product B"); } } public interface Factory { Product createProduct(); } public class FactoryA implements Factory { @Override public Product createProduct() { return new ProductA(); } } public class FactoryB implements Factory { @Override public Product createProduct() { return new ProductB(); } } ``` 2. MVC设计模式实现部分: ``` public class Model { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } } public class View { public void showData(String data) { System.out.println(data); } } public class Controller { private Model model; private View view; private Factory factory; public Controller(Model model, View view, Factory factory) { this.model = model; this.view = view; this.factory = factory; } public void process() { String data = model.getData(); Product product = factory.createProduct(); product.use(); view.showData(data); } } ``` 3. 测试代码部分: ``` public class Test { public static void main(String[] args) { Model model = new Model(); model.setData("Hello, factory method pattern and MVC design pattern!"); View view = new View(); Factory factory = new FactoryA(); Controller controller = new Controller(model, view, factory); controller.process(); } } ``` 测试结果输出: ``` Use product A Hello, factory method pattern and MVC design pattern! ``` 以上就是结合工厂方法模式和MVC设计模式的Java代码实现,希望能够帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值