博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
02工厂方法模式FactoryMethod
阅读量:6209 次
发布时间:2019-06-21

本文共 2182 字,大约阅读时间需要 7 分钟。

一、什么是工厂方法模式

  工厂方法模式同样属于类的创建型模式又被称 为多态工厂模式 。工厂方法模式的意义是定义一个创建 产品对象的工厂接口,将实际创建工作推迟到子类当中。 核心工厂类不再负责产品的创建,这样核心类成为一个 抽象工厂角色,仅负责具体工厂子类必须实现的接口, 这样进一步抽象化的好处是使得工厂方法模式可以使系 统在不修改具体工厂角色的情况下引进新的产品。

 

二、模式中包含的角色及其职责

  1.抽象工厂(Creator)角色工厂方法模式的核心,任何工厂类都必须实现这个接口。

  2.具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负责实例化产品对象。

  3.抽象(Product)角色工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

  4.具体产品(Concrete Product)角色工厂方法模式所创建的具体实例对象

 

三、工厂方法模式和简单工厂模式比较

  工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方 法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具 体类上。

  工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工 厂类都有共同的接口,或者有共同的抽象父类。

  当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对 象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也 不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂 模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

  工厂方法模式退化后可以演变成简单工厂模式。

苹果类

1 public class Apple implements Fruit{2     /*3      * 采集4      */5     public void get(){6         System.out.println("采集苹果");7     }8 }

香蕉类

1 public class Banana implements Fruit{2     /*3      * 采集4      */5     public void get(){6         System.out.println("采集香蕉");7     }8 }

梨子类

1 public class Pear implements Fruit {2 3     public void get() {4         System.out.println("采集梨子");5     }6 }

水果类

1 public interface Fruit {2     /*3      * 采集4      */5     public void get();6 }

苹果工厂

1 public class AppleFactory implements FruitFactory {2 3     public Fruit getFruit() {4         return new Apple();5     }6 }

香蕉工厂

1 public class BananaFactory implements FruitFactory {2 3     public Fruit getFruit() {4         return new Banana();5     }6 }

梨子工厂

1 public class PearFactory implements FruitFactory {2 3     public Fruit getFruit() {4         return new Pear();5     }6 }

测试类

1 public class MainClass { 2     public static void main(String[] args) { 3         //获得AppleFactory 4         FruitFactory ff = new AppleFactory(); 5         //通过AppleFactory来获得Apple实例对象 6         Fruit apple = ff.getFruit(); 7         apple.get(); 8          9         //获得BananaFactory10         FruitFactory ff2 = new BananaFactory();11         Fruit banana = ff2.getFruit();12         banana.get();13         14         //获得PearFactory15         FruitFactory ff3 = new PearFactory();16         Fruit pear = ff3.getFruit();17         pear.get();18     }19 }

 

转载于:https://www.cnblogs.com/justdoitba/p/9031359.html

你可能感兴趣的文章
567. Permutation in String字符串的排列(效率待提高)
查看>>
环绕型布局
查看>>
CSS中font-style的属性有Italic oblique,它们俩的区别是什么呢?
查看>>
gitlab结构分析
查看>>
c++类构造函数初始化列表
查看>>
实验二+138+牟平
查看>>
Eval
查看>>
WebForm 使用点滴。。。。
查看>>
fiddler还是浏览器的问题
查看>>
springmvc全局异常处理
查看>>
Unity 执行命令行
查看>>
游戏爱好调查问卷结果
查看>>
[C++11]shared_ptr效率比较
查看>>
防止 NSTimer retain 作为 target 的 self
查看>>
tabhost使用
查看>>
Android笔记之启动界面的设置
查看>>
js的数据类型
查看>>
【转】Oracle/PLSQL: Decode Function
查看>>
读书是为了生命的完整
查看>>
使用位运算计算两个整数的加减
查看>>