工厂模式
自己想说点什么:
其实每次学习设计模式 总是工厂模式总是最简单和最容易懂的,但我一直觉得设计模式要结合场景,每个设计模式我总是能在心中模拟一些场景使用,但这个最简单的工厂模式总是举不出例子。于是再重新系统学习一下,(已经记忆 但需深刻理解)
简单工厂
自我总结: 一个实体类对应一个工厂类 封装了创建实体的过程 但扩展性也不好 而且有我最讨厌的 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);
}
}
总结: 工厂模式主要是封装了具体创建对象的内容 把实例化的内容放到一个地方维护