(@WhiteTaken)设计模式学习——工厂方法模式
来源:互联网 发布:2017网络英文热词 编辑:程序博客网 时间:2024/06/03 12:44
这个工厂方法模式,是简单工厂的延伸,不同点在于,将某个具体的类继续细分,将核心部分抽象成一个接口。而简单工厂,把核心写在了一个类上,不利于拓展。
举个例子,简单工厂中有苹果类,香蕉类,我们创建了一个FruitFactory的工厂类,用来生成苹果和香蕉类的实例。
但是如果我们需要创建更多的水果类,这时候就需要修改FruitFactory工厂类。这样做很不方便。
这时候就有了工厂方法模式的实现。
具体方法是我们将总的工厂类,抽象成一个接口,然后创建苹果类工厂和香蕉类工厂,去实现这个接口。
这样即使我们再添加橘子类,我们需要创建橘子类工厂去实现水果工厂的接口。
在客户端的调用中就可以轻松获得橘子对象。
直接上代码:
1.创建一个水果接口,让水果们都去实现它。
1 public interface Fruit {2 public void Get();3 }
2.创建苹果类和香蕉类。
1 public class Apple implements Fruit{ 2 public void Get() 3 { 4 System.out.println("Apple"); 5 } 6 } 7 8 public class Banana implements Fruit { 9 public void Get() {10 System.out.println("Banana"); 11 }12 }
3.创建水果工厂的接口。
1 public interface FruitFactory {2 public Fruit getFruit();3 }
4.创建苹果工厂和香蕉工厂,去实现水果工厂的接口。
1 public class AppleFactory implements FruitFactory{ 2 public Fruit getFruit() { 3 return new Apple(); 4 } 5 } 6 7 public class BananaFactory implements FruitFactory { 8 public Fruit getFruit() { 9 return new Banana();10 }11 }
5.主客户端要做的事。
1 public class MainClass { 2 public static void main(String[] args) throws InstantiationException, IllegalAccessException { 3 FruitFactory appleFactory=new AppleFactory(); 4 FruitFactory bananaFactory=new BananaFactory(); 5 Fruit apple=appleFactory.getFruit(); 6 Fruit banana=bananaFactory.getFruit(); 7 apple.Get(); 8 banana.Get(); 9 }10 }
这样就完成了工厂方法模式与简单工厂的结合。极大的降低了耦合。
0 0
- (@WhiteTaken)设计模式学习——工厂方法模式
- (@WhiteTaken)设计模式学习——工厂方法模式
- (@WhiteTaken)设计模式学习——工厂方法模式
- (@WhiteTaken)设计模式学习——工厂方法模式
- (@WhiteTaken)设计模式学习——简单工厂模式
- (@WhiteTaken)设计模式学习——简单工厂模式
- (@WhiteTaken)设计模式学习——简单工厂模式
- 设计模式学习—工厂方法模式
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- Head First 设计模式学习——简单工厂方法-工厂方法模式-抽象工厂模式
- 学习设计模式——工厂方法
- 设计思想学习—工厂方法模式
- 设计模式学习003——工厂模式(工厂方法、抽象工厂),简单工厂【也叫静态工厂】
- 设计模式学习笔记——工厂方法模式
- JAVA设计模式学习5——工厂方法模式
- 学习设计模式之禅——工厂方法模式
- 设计模式学习2——工厂方法模式
- 设计模式学习笔记——工厂方法模式
- Unity中将角色对齐地形高度的方法
- OpenWRT(十一)LuCi开发(二)
- 7对数字
- Java多线程-实例解析
- 实现SDK的打包处理
- (@WhiteTaken)设计模式学习——工厂方法模式
- Linux下MPI并行编程环境搭建配置
- 最长公共子序列(LCS)
- mysql常用语句——结合select的insert语句
- 深入.NET和C#第二章上机3
- linux下的编辑器notepadqq
- R 知识片段
- 使用opencv_traincascade训练级联分类器检测手掌(一)
- ble收藏