这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口。而简单工厂,把核心写在了一个类上,不利于拓展。

举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个FruitFactory的工厂类,用来生成苹果和香蕉类的实例。

但是如果我们需要创建更多的水果类,这时候就需要修改FruitFactory工厂类。这样做很不方便。

这时候就有了工厂方法模式的实现。

具体方法是我们将总的工厂类,抽象成一个接口,然后创建苹果类工厂和香蕉类工厂,去实现这个接口。

这样即使我们再添加橘子类,我们需要创建橘子类工厂去实现水果工厂的接口。

在客户端的调用中就可以轻松获得橘子对象。

直接上代码:

1.创建一个水果接口,让水果们都去实现它。

 public interface Fruit {
public void Get();
}

2.创建苹果类和香蕉类。

 public class Apple implements Fruit{
public void Get()
{
System.out.println("Apple");
}
} public class Banana implements Fruit {
public void Get() {
System.out.println("Banana");
}
}

3.创建水果工厂的接口。

 public interface FruitFactory {
public Fruit getFruit();
}

4.创建苹果工厂和香蕉工厂,去实现水果工厂的接口。

 public class AppleFactory implements FruitFactory{
public Fruit getFruit() {
return new Apple();
}
} public class BananaFactory implements FruitFactory {
public Fruit getFruit() {
return new Banana();
}
}

5.主客户端要做的事。

 public class MainClass {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
FruitFactory appleFactory=new AppleFactory();
FruitFactory bananaFactory=new BananaFactory();
Fruit apple=appleFactory.getFruit();
Fruit banana=bananaFactory.getFruit();
apple.Get();
banana.Get();
}
}

这样就完成了工厂方法模式与简单工厂的结合。极大的降低了耦合。

最新文章

  1. Python 生成器与迭代器 yield 案例分析
  2. GPUImage 内置滤镜解析
  3. 如何避免后台IO高负载造成的长时间JVM GC停顿(转)
  4. 找到一个学习bootstrap的好网站
  5. POJ2192 - Zipper(区间DP)
  6. SGU Volume 1
  7. CharacterController 角色控制器实现移动和跳跃
  8. MySQL 分区表各个分区的行数
  9. Java String类和Object类
  10. Python并发编程之学习异步IO框架:asyncio 中篇(十)
  11. java多线程快速入门(八)
  12. getVisibleSize,getWinSize,getFrameSize,getViewPortRect
  13. eclipse下创建maven项目并部署到tomcat服务器(转)
  14. 七夕情人节表白-纯JS实现3D心形+图片旋转
  15. Spring Boot--02MVC设置
  16. jQuery页面滚动数字增长插件
  17. 复习,关于server.xml的一点理解
  18. C++ 获取特定进程的CPU使用率<转>
  19. .NET MVC Scripts.Render 上下文不存在问题解决方法
  20. iOS10修改电池状态栏的方法

热门文章

  1. Cocos2dx 3.1.1 学习笔记整理(4):事件监听与Action的初步使用
  2. ApexSql Log
  3. C# 6.0 11个新特性
  4. mysql管理---表分区
  5. VSC#2010打开视图编辑器假死/卡死
  6. (简单) HDU 3397 Sequence operation,线段树+区间合并。
  7. 【转】50条大牛C++编程开发学习建议
  8. iOS Socket第三方开源类库 ----AsyncSocket 分类: ios相关 ios技术 2015-03-11 22:14 59人阅读 评论(0) 收藏
  9. md5-linux_shell
  10. bzoj3289