简单工厂模式(java版)
来源:互联网 发布:网络流行语英语作文 编辑:程序博客网 时间:2024/05/01 20:06
1.为啥要去工厂搞斧头?
最开始人类需要斧头,得自己磨石头,自己造,也就是我们最开始玩的new对象的方式,其实我们只想用斧头,不想关心它是怎么造的,后来有了工厂的方式,我们只需和工厂说下需要什么斧头,工厂就帮我们搞出来了。然而最高的境界是我们需要斧头,有服务人员自动送到你手上,可能这就是spring的核心依赖注入吧,磕得打住,这篇博文只唠简单工厂模式,所以主要特点就是为了省事。
2.工厂是如何按你的要求把斧头造出来,交给你?
--2.1提供了制造斧头的接口(这个网上叫做抽象产品):
//实现制造斧头的接口public interface Axe {//制造 public void make();}
--2.2加入制造斧头的材料,最终通过实现造斧头的接口来造出一把斧头(这个网上叫做具体产品):
public class SteelAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.out.println("制造出来了钢斧!");}}public class StoneAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.out.println("制造出来了石斧!");}}public class WoodenAxe implements Axe{@Overridepublic void make() {// TODO Auto-generated method stubSystem.out.println("制造出来了木斧!");}}
上面就把各种斧头都实现了,我的要求是:”工厂给我提供一个我需要类型的斧头“。所以就需要实现工厂类了。
--2.3如何根据需要,提供一把斧头:
public class AxeFactory {public static Axe makeAxe(String axeName){Axe axe=null;switch(axeName){case "钢斧":axe=new SteelAxe();break;case "石斧":axe=new StoneAxe();break;case "木斧":axe=new WoodenAxe();break;}return axe;}}这样就可以由我输入需要的什么类型的斧头,工厂给我返回需要的斧头。
--2.4这工厂到底靠谱不,测试类:
public class AxeTest {public static void main(String[] args) {Axe axe=AxeFactory.makeAxe("木斧");axe.make();}}打印结果:
制造出来了木斧!
3.这种简单工厂模式好不好啊?
--3.1好处:
简单工厂模式的好处是逻辑判断都实现在了工厂类中,可以根据用户的选择条件,动态的实例化需要的类,并且对于用户来说,它和工厂类没什么依赖,就是一个斧头关系,其他制造啥的与用户无关。
--3.2坏处:
简单工厂模式的效率不高啊,如果用户需要一把金斧,除了Axe接口不改,剩下的都要大改,总的来说就是不利于扩展,扩展性差,
其实就是违反了开-闭原则(对扩展开放,对修改封闭)。而此时需要金斧就得对修改开放。
----------------------------------------------
如果有的地方比喻不恰当,请看友指出。
0 0
- 简单工厂模式(java版)
- Java工厂模式(简单工厂、工厂方法、抽象工厂)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- Java设计模式:工厂模式(一)简单工厂模式
- Java设计模式-工厂模式(1)简单工厂模式
- java学习之工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 简单工厂模式(java设计模式)
- Java 简单工厂模式
- java 简单工厂模式
- 简单工厂模式--Java
- Java简单工厂模式
- Java简单工厂模式
- java简单工厂模式
- java 简单工厂模式
- java 简单工厂模式
- java简单工厂模式
- 简单工厂模式(Java)
- C++模板
- spring管理httpclient
- Android手机数据读写方法(内部存储、SD卡,网络加载,包内文件读取)
- Material Design Learning in Udacity
- 10、java web数据库操作
- 简单工厂模式(java版)
- Linux的nm查看动态和静态库中的符号
- 【二维费用之完全背包】HDU3127-WHUgirls
- 给定一个十进制n,从1开始,到n的所有整数,求出现1的个数
- C++中的单例模式
- GDB动态库搜索路径
- 通信方式嘛,我想...那就电子邮件吧
- Redis入门 -学习笔记(1)
- HDU 2509 Be the Winner(Anti-Nim)