工厂模式笔记

工厂模式

自己想说点什么

其实每次学习设计模式 总是工厂模式总是最简单和最容易懂的,但我一直觉得设计模式要结合场景,每个设计模式我总是能在心中模拟一些场景使用,但这个最简单的工厂模式总是举不出例子。于是再重新系统学习一下,(已经记忆 但需深刻理解)

简单工厂

自我总结: 一个实体类对应一个工厂类 封装了创建实体的过程 但扩展性也不好 而且有我最讨厌的 ifelse (这里其实可以结合策略模式使用)

//写点伪代码
public class Chubing { //出兵 dota出兵了
	public String chubing(String name){
		switch(name){
		case "tianhui":
			return  TianHuiFactory.createBing();
		case "yeyan":
			return YeYanFactory.createBing();
			default:
			return "";
		}
	}
}
//简单工厂 真的简单,,但是拓展性非常差 

工厂方法

自我总结:把各种实体规划成了树 有了分类 更加整洁
有一个核心工厂方法 让各个工厂类去实现这个方法

	public abstract  class ChuBing{
	
	  	abstract Bing chubing(String name);
	  	
		public 	ChuBing(String name){
		Bing bing = null;
		bing = chubing(name);
		return bing;
	}
}

public class TianHui extends ChuBing{
	@Override
	public Bing chubing(String name){
			if(name.equals("yuancheng")){
					return new YuanChengBing();
				}else if(name.equals("jinzhan")){
					return new JinZhan();
				}else{
				return null;
			}
		}
	}
	//工厂方法模式主要是有一个核心的方法  需要子类去实现   统一了管理 
	//但是扩展性还不是很强  毕竟接口和实现类才是最完美的

抽象工厂模式

工厂模式拆解成 抽象工厂(接口) 让下面的工厂子类具体实现

//抽象工厂
public interface AbsFactory{
	public Bing chubing(String name);
}

//天辉  具体实现
public class TianHui implements AbsFactory{
@Override
public Bing chubing(String name){
		if(name.equals("jinzhan")){
			return new TianHuiJinZhan();
		}else if(name.equals("yuancheng")){
		return new TianHuiYuanCheng();
		}
	}
}

public class ChuBing{
	AbsFactory factory;
	
	public ChuBing(AbsFactory  factory){
		this.factory = factory;
	}	
	public Bing chubing(String name){
		return factory.chubing(name);
	}
}

总结: 工厂模式主要是封装了具体创建对象的内容 把实例化的内容放到一个地方维护

发布了24 篇原创文章 · 获赞 10 · 访问量 3088

猜你喜欢

转载自blog.csdn.net/qq_43091847/article/details/103152543