简单工厂

简单工厂模式也成静态工厂模式,但此模式不符合开闭原则,但仍然很常用
适用范围:工厂类需要创建的对象种类比较少,客户端只需要知道传入工厂类的参数,对于如何创建对象(逻辑)不关心

上段代码:

public abstract class Bread {public abstract void getBread();
}public class Brioche extends Bread {@Overridepublic void getBread() {System.out.println("奶油面包");}}public class Sandwich extends Bread {@Overridepublic void getBread() {System.out.println("三明治");}}public class Doughnut extends Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}
}public class BreadFactory {public static Bread createBread(Class c){try {Bread b = (Bread)Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}

工厂方法

工厂方法相比简单工厂的差别是工厂方法并不会自己去创建对象,它将创建方法交给子工厂实现,这样符合开闭原则,对于新增的类型只需扩展无需修改


代码如下:

public abstract class Bread {public abstract void getBread();
}public class Brioche extends Bread {@Overridepublic void getBread() {System.out.println("奶油面包");}}public class Sandwich extends Bread {@Overridepublic void getBread() {System.out.println("三明治");}}public class Doughnut extends Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}
}public abstract class AbstractBreadFactory{public abstract Bread createBread();
}public class BriocheFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Brioche();}
}public class SandwichFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Sandwich();}
}public class DoughnutFactory extends AbstractBreadFactory{@Overridepublic Bread createBread() {return new Doughnut();}
}

抽象工厂

用于产品族的构建。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。

public interface Bread{public void getBread();public void getBreadSize();
}
public abstract class Doughnut implements Bread {@Overridepublic void getBread() {System.out.println("甜甜圈");}
}public class BigDoughnut extends Doughnut{@Overridepublic void getBreadSize() {System.out.println("大号甜甜圈");     }
}
public interface BreadFactory{public Bread createBrioche();public Bread createSandwich();public Bread createDoughnut();
}public class BigFactory implements BreadFactory{@Overridepublic Bread createBrioche() {return new BigBrioche();}@Overridepublic Bread createSandwich() {return new BigSandwich();}@Overridepublic Bread createDoughnut() {return new BigDoughnut();}
}

设计模式学习笔记——03 简单工厂 工厂方法 抽象工厂相关推荐

  1. 大化设计模式学习笔记(简单工厂模式)

    实质:生产具有相同逻辑的构造器类,也就是由一个工厂对象决定创建出哪一种产品类的实例 案例:计算器 demo见https://github.com/mrjdrs/sign-model.git

  2. 步步为营 .NET 设计模式学习笔记系列总结

    设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...

  3. 设计模式学习笔记清单

    设计模式学习笔记清单 关于设计模式许多人已经耳熟能详,这段时间结合李建忠的教学视频以及大量网络资料,把这部分过了一遍,整理出学习笔记,而真正的深入学习和理解只能在具体的开发环境中日积月累.      ...

  4. 设计模式学习笔记汇总目录

    这里的学习笔记包含JavaSE和J2EE两部分,持续更新中! 其中关于学习的参考资料如下: 1.菜鸟设计模式 2.Head First Design Patterns(书.强烈推荐); 3.大话设计模 ...

  5. java/android 设计模式学习笔记(8)---桥接模式

    这篇博客我们来介绍一下桥接模式(Bridge Pattern),它也是结构型设计模式之一.桥接,顾名思义,就是用来连接两个部分,使得两个部分可以互相通讯或者使用,桥接模式的作用就是为被分离了的抽象部分 ...

  6. 设计模式学习笔记(三)简单工厂、工厂方法和抽象工厂之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  7. 设计模式学习笔记(三)工厂模式中的简单工厂、工厂方法和抽象工厂模式之间的区别

    设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory).工厂方法(Factory Method ...

  8. 设计模式学习笔记-2 创建者模式-工厂方法模式

    设计模式学习笔记-2 创建者模式-工厂方法模式 工厂模式介绍 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 这种设计模式使Java开 ...

  9. java/android 设计模式学习笔记(3)---工厂方法模式

    这篇来介绍一下工厂方法模式(Factory Method Pattern),在实际开发过程中我们都习惯于直接使用 new 关键字用来创建一个对象,可是有时候对象的创造需要一系列的步骤:你可能需要计算或 ...

最新文章

  1. 如何成为一名Android架构师,乃至高级架构师,文末有路线图
  2. seaborn系列 (4) | 分类图catplot()
  3. Storage 使用
  4. gin 项目结构_Go Web 框架 Gin 路由的学习
  5. 电脑能开机但进不去系统,电脑只能进安全模式怎么处理?
  6. java string常见操作题
  7. tomcat 开启 https 使用apr
  8. 全国计算机vfp是什么,计算机二级VFP数据库简介
  9. linux连接交换机软件,如何用超级终端连接交换机 - 全文
  10. eeglab和matlab,Matlab之EEGLAB工具箱脑电数据预处理
  11. Django下载、安装
  12. 大数据在智慧城市建设中的应用
  13. 领导干部信息管理系统某省实践案例
  14. AIDL简单实用新手教程(AIDL 包含回调,耗时处理,in out inout oneway使用、打包jar等内容) 附demo下载
  15. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程
  16. h5课件制作_一款专业的HTML5课件制作工具:炫课
  17. 再高贵的打工人都得在体检报告前低下高贵的头颅
  18. 森林防火监控系统解决方案及标准权威解读
  19. 机房空调漏水原因和常用处理方法
  20. 100万补贴!东湖高新区知识产权运营服务体系建设项目申报时间、条件流程大全

热门文章

  1. 【计算机毕业设计】java ssm 高校食堂订餐/点餐系统
  2. 软件测试模糊搜索用例,模糊测试中测试用例生成方法.pdf
  3. Matlab使用交叉验证
  4. 安装使用clang-format
  5. VM虚拟机安装Windows sever2008 R2系统
  6. 使用端点中心进行补丁管理
  7. 游戏耳机什么牌子好?2022年最值得入手的游戏蓝牙耳机
  8. python属于什么类型软件_c语言和python区别是什么
  9. 【Python】绘图和可视化
  10. 静态旅游网站(移动端)