简单工厂模式
1.什么是简单工厂
个人理解就是定义一个类负责其它类的实例的创建,
2.简单实例
举个例子就是:一个工厂养一种金鱼,随着时代的发展,他还想养其他种类的鱼,这个时候就需要一个单独的类来养鱼,就需要用到简单工厂了
3.简单工厂模式结构图
工厂Factory依赖于抽象类Fish,具体产品GoldFish、CatFish继承抽象类\接口Fish
4.1简单分析
拿上述例子分析;
工厂:一个Factory
具体产品:GoldFish CatFish
抽象类\接口:Fish
4.2创建产品抽象类\接口
public interface Fish {
void grow();//生长
}
4.3.1创建具体产品类
public class GoldFish implements Fish {
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println("金鱼在生长");
}
}
public class CatFish implements Fish {
@Override
public void grow() {
// TODO Auto-generated method stub
System.out.println("鲇鱼在生长");
}
}
4.3.2创建工厂
public class factory {
Fish FeedFish(String type) { //type代表用户的需求
switch(type) {
case"金鱼": return new GoldFish();
case"鲇鱼": return new CatFish();
}
return null;
}
}
5.客户端调用工厂类
public class simpleFactory{
public static void main(String[] args) {
factory factory = new factory();
factory.produceFish("鲇鱼").grow();
factory.produceFish("金鱼").grow();
}
}
运行结果:
鲇鱼在生长
金鱼在生长
简单工厂运用了七大原则之中的三种
1.单一职责原则:每个模块只负责自己的事情,各个模块通过接口隔离
2.里氏替换原则:对外只暴露接口,依赖于抽象
3.迪米特法则:只需要知道接口即可
优点:
1.把具体产品的类型从客户端解耦出来
2.如果客户端修改具体产品的类名,客户端也不知道,符合面向接口编程的思想
缺点:
1.客户端需要记住的固定东西太多。switch语句中的case值对应的相关内容
2.具体产品若太多,本文中若果鱼的种类过多,switch中的case也就比较多
3.不可以扩展新的产品,养其它产品,就会修改原类,就违背了“开闭原则”
————————————————————————————————————————————
PS:本人第一次写,花了1个多小时。若有什么错误,希望大家能指出来,第一次学可能懂得还不多,错误难免,望见谅