(1.3)工厂模式之抽象工厂模式

抽象工厂模式角色

抽象工厂模式涉及到的系统角色
(1)抽象工厂(AbstractFactory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统的商业逻辑无关的。通常使用Java 接口或者抽象Java 类实现,而所有的具体工厂类必须实现这个Java 接口或继承这个抽象Java 类。
(2)具体工厂类(Conrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。通常使用具体Java 类实现这个角色。
(3)抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。通常使用Java 接口或者抽象Java 类实现这一角色。
(4)具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。通常使用具体Java 类实现这个角色。

 产品族:一个工厂可以生产多个产品

   //工厂接口,即抽象工厂
        interface IFactory
        {
            IFridge CreateFridge();
            IAirCondition CreateAirCondition();
        }
 
 
        //三星的工厂,生产三星的产品族
        public class SamsungFactory : IFactory
        {
  
            public IAirCondition CreateAirCondition() 
            {
                return new SamsungAirCondition(); //三星的工厂生产三星的空调
              
            }
 
            public IFridge CreateFridge()
            {
                return new SamsungFridge(); //三星的工厂生产三星的冰箱
            }
        }
 
        //格力的工厂,生产格力的产品族
 
        public class GreeFactry : IFactory
        {
            public IAirCondition CreateAirCondition()
            {
                return new GreeAirCondition(); //格力的工厂生产格力的空调
            }
 
            public IFridge CreateFridge()
            {
                return new GreeFridge(); //格力的工厂生产格力的冰箱
            }
        }
 
        //冰箱产品接口
        public interface IFridge
        {
            //冰箱产品接口
            //冰箱的action
        }
 
        //空调接口
        public interface IAirCondition
        {
            //空调产品接口
            //空调的action
        }
 
        //三星的冰箱
        public class SamsungFridge: IFridge
        {
           //三星冰箱的action和property
        }
        //格力的冰箱
        public class GreeFridge : IFridge
        {
             //格力冰箱的action和property
        }
 
        //三星的空调
        public class SamsungAirCondition : IAirCondition
        {
           //三星空调的action和property
        }
        //格力的空调
        public class GreeAirCondition : IAirCondition
        {
            //格力空调的action和property
        }

我们可以看到,在工厂模式中,一个工厂生产一个产品,所有的具体产品是由同一个抽象产品派生的,不存在产品等级结构和产品族的概念;而在抽象工厂中,同一个等级的产品是派生于一个抽象产品(即产品接口),一个抽象工厂派生不同的具体工厂,每个具体工厂生产自己的产品族(包含不同产品等级)。所以我们得到第四个结论,工厂模式中,一个工厂生产一个产品,所有产品派生于同一个抽象产品(或产品接口);而抽象工厂模式中,一个工厂生产多个产品,它们是一个产品族,不同的产品族的产品派生于不同的抽象产品(或产品接口)。

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/88605998