上一篇说到了工厂模式,那么学习了工厂模式,抽象工厂也得学习一下。实际上,抽象工厂模式实际上就是在工厂模式的基础上再嵌套一层工厂模式而已,通过父工厂制造子工厂。只是,也并不完全是嵌套一层,各个工厂会被抽象成一个集多个工厂共同点的抽象类。通过工厂制造器,创建出该抽象工厂的子类。
好比如说,一个博客页面有个换肤系统。那么假如有两套风格,黑和白,那么,我选择了黑色风格的,实际这步就相当通过换肤系统这个工厂制造器,创建出一个黑色主题的工厂,该黑色主题的工厂内可以生产各种黑色风格的产品,比如黑色头像挂饰,黑色背景,黑色的xxx等,然后通过这些黑色主题产品完成了整个换肤操作。白色主题也如此。
好吧,上次以水果工厂作为一个类,那么这次要创建一个蔬菜工厂,水果和蔬菜这两类都属于种植物,那么我们就可以根据这一共同点抽象出一个种植物抽象类,即种植物工厂。
首先,创建产品类,包括上次的水果,和现在的蔬菜,他们都实现了水果类接口和蔬菜类接口:
<强>水果系列:强>
公共接口水果{ 空白printInfo (); }
公共类苹果实现水果{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“苹果”); } }
公共类香蕉实现水果{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“香蕉”); } }
公共类橙色实现水果{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“橙子”); } }
<强>接着是蔬菜系列:强>
公共接口蔬菜{ 公共空间printInfo (); }
公共类番茄实现蔬菜{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“西红柿”); } }
公共类卷心菜实现蔬菜{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“白菜”); } }
公共类茄子实现蔬菜{ @Override 公共空间printInfo () {//TODO自动生成方法存根 System.out.println(“茄子”); } }
<>强然后,是它们各自的工厂类:
强>
<强>水果工厂:强>
公开课FruitFactory延伸PlantFactory { 公共静态最终int苹果=1; 公共静态最终int香蕉=2; 公共静态最终int橙色=3; @Override 公共水果getFruit (int fruitType) { 如果苹果(fruitType==) { 返回新的苹果(); } 如果香蕉(fruitType==) { 返回新香蕉(); } 如果(fruitType==橙色){ 返回新橙(); } 返回null; } @Override 蔬菜getVegetable (int vegetableType) {//TODO自动生成方法存根 返回null; } }
<强>蔬菜工厂:强>
公开课VegetableFactory延伸PlantFactory { 公共静态最终int卷心菜=1; 公共静态最终int番茄=2; 公共静态最终int茄子=3; @Override 水果getFruit (int fruitType) {//TODO自动生成方法存根 返回null; } @Override 公共蔬菜getVegetable (int vegetableType) {//TODO自动生成方法存根 如果(vegetableType==卷心菜){ 返回新卷心菜(); } 如果番茄(vegetableType==) { 返回新番茄(); } 如果(vegetableType==茄子){ 返回新茄子(); } 返回null; } }
<强>可以看的到,它们都是属于种植物这一类,所以都是继承了种植工厂类强>
公共抽象类PlantFactory { 抽象的水果getFruit (int fruitType); 文摘蔬菜getVegetable (int vegetableType); }
<强>最后,提供一个工厂生产器,即生产工厂的工厂:强>
公开课种植园{ 公共静态最终int水果=1; 公共静态最终int蔬菜=2; 公共静态PlantFactory getFactory (int factoryType) { 如果水果(factoryType==) { 返回新FruitFactory (); } 如果蔬菜(factoryType==) { 返回新VegetableFactory (); } 返回null; } }Java设计模式笔记之抽象工厂代码示例