zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    先前有简单工厂模式工厂模式,工厂模式在简单工厂模式基础上解耦和。

    而工厂模式和抽象工厂模式有什么不同呢?有人可能会发问,工厂模式的代码里面不是有个抽象的工厂类吗?

    对于这一点,的确如此,但是每一个工厂类只能生产一个产品(要么香蕉,要么苹果),不能生产一个产品族(水果拼盘)。而抽象工厂模式刚好做到这一点,它能生产出一个产品族(包含很多种产品)

    抽象工厂包含多个产品结构的声明,任何工厂类都必须实现这个借口。

    请看下面代码:

    <?php 
    	//创建水果基类
    	abstract class Fruit{
    		abstract public function say();
    	}
    	//创建一个绿苹果类
    	class GreenApple extends Fruit{
    		public function say(){
    			echo "I'm Green Apple
    ";
    		}
    	}
    	//创建一个红苹果类
    	class RedApple extends Fruit{
    		public function say(){
    			echo "I'm Red Apple
    ";
    		}
    	}
    	//创建一个绿香蕉类
    	class GreenBanana extends Fruit{
    		public function say(){
    			echo "I'm Green banana
    ";
    		}
    	}	
    	//创建一个黄香蕉类
    	class YellowBanana extends Fruit{
    		public function say(){
    			echo "I'm Yellow banana
    ";
    		}
    	}	
    
    	//创建一个抽象工厂来
    	abstract class Factory{
    		abstract public function getApple();
    		abstract public function getBanana();
    	}
    	//创建生产红苹果和黄香蕉的工厂类
    	class NotGreenFactory extends Factory{
    		public function getApple(){
    			return new RedApple;
    		}
    		public function getBanana(){
    			return new YellowBanana;
    		}
    	} 
    	//创建生产绿苹果和绿香蕉水果的工厂类
    	class GreenFactory extends Factory{
    		public function getApple(){
    			return new GreenApple;
    		}
    		public function getBanana(){
    			return new GreenBanana;
    		}
    	}
    
    	//用绿色工厂类来生产水果,生产的水果为绿色
    	$factory=new GreenFactory();
    	$fruit=$factory->getApple();
    	$fruit->say();//I'm Green Apple
    
    	//用非绿色工厂类来生产水果,生产的水果为非绿色
    	$factory=new NotGreenFactory();
    	$fruit=$factory->getBanana();
    	$fruit->say();//I'm Yellow banana
     ?>
    

      看了上面的代码,感觉还没工厂模式好用,因为用抽象工厂模式,当有新产品的时候,不仅要创建新产品的类,还要修改抽象工厂类中的方法(添加获得新增产品的接口),然后让各具体工厂类实现,可以说是比较复杂的,很难扩展。

  • 相关阅读:
    十五。JAVA方法的分类
    八。java数组
    十三。第三章实例
    十二。工具类中算法的实现
    九。求JAVA最大,最小,平均值
    十四。JAVA类的认识
    十一。查找
    Listview中使用线程实现无限加载更多项目的功能
    PL/SQL Developer的常用技巧
    android异步加载图片
  • 原文地址:https://www.cnblogs.com/-beyond/p/7753920.html
Copyright © 2011-2022 走看看