首页 > 其他 > 详细

factory工厂模式之抽象工厂AbstractFactory

时间:2016-01-23 00:56:04      阅读:297      评论:0      收藏:0      [点我收藏+]

* 抽象工厂:

  意图在于创建一系列互相关联或互相依赖的对象。
* 每个工厂都会创建一个或多个一系列的产品
* 适用于:产品不会变动,开始时所有产品都创建好,然后根据分类获取想要的 某一类产品(很像spring容器)

 

代码解释:

1.创建产品接口:手机和它的实现子类

//手机接口
public interface MobileProduct {
    
}

//实现子类Android
public class Android implements MobileProduct{

    public Android() {
        System.out.println("生产一个Android手机...");
    }
}

//实现子类Apple
public class Apple implements MobileProduct{

    public Apple() {
        System.out.println("生产一个Apple手机...");
    }
}

2.创建产品接口2:汽车,和它的实现子类

//第二种产品:汽车
public interface CarProduct {
    
}

//实现子类1:宝马
public class BaoMa implements CarProduct{

    public BaoMa() {
        System.out.println("生产一个宝马汽车...");
    }
}

//实现子类2:奔驰
public class BenChi implements CarProduct{

    public BenChi() {
        System.out.println("生产一个奔驰汽车...");
    }
}

3.创建抽象父类(或者抽象接口)和方法:可以生产手机和汽车,但是具体生产那种手机和汽车,不一定(由子类决定),因为里面的方法返回也是抽象的

//这里写接口也可以,抽象类个人理解:具体能看见的事物;接口:看不见的
public abstract class AbstractFactory {
    
    /**
     * 生产一个产品
     * @return
     */
    public abstract MobileProduct processMobile();
    /**
     * 生产一个产品
     * @return
     */
    public abstract CarProduct processCar();
}

4.实现2个生产系列产品的工厂

/**
 * 生产 产品系列:一个苹果,一个宝马
 * @author mlxs
 *
 */
public class FactoryMothedA extends AbstractFactory{

    @Override
    public MobileProduct processMobile() {
        return new Apple();
    }

    @Override
    public CarProduct processCar() {
        return new BaoMa();
    }
    
}
/**
 * 生产方式B 产品系列:一个安卓,一个奔驰
 * @author mlxs
 *
 */
public class FactoryMothedB extends AbstractFactory{

    @Override
    public MobileProduct processMobile() {
        return new Android();
    }

    @Override
    public CarProduct processCar() {
        return new BenChi();
    }
}

5.客户端测试

public static void main(String[] args) {
        System.out.println("-----------------生产系列A:苹果和宝马-------------------");
        //生产系列A:苹果和宝马
        AbstractFactory factory = new FactoryMothedA();
        factory.processMobile();
        factory.processCar();
        
        System.out.println("\n-----------------生产系列B:安卓和奔驰-------------------"); 
    //生产系列B:安卓和奔驰
    AbstractFactory factoryB = new FactoryMothedB();
    factory.processMobile(); factory.processCar(); }

6.结果:

-----------------生产系列A:苹果和宝马-------------------
生产一个Apple手机...
生产一个宝马汽车...

-----------------生产系列B:安卓和奔驰-------------------
生产一个Apple手机...
生产一个宝马汽车...

 

 

 

缺陷:有新产品的时候,改动地方很多(产品类、系列工厂类、抽象工厂类都要改)

factory工厂模式之抽象工厂AbstractFactory

原文:http://www.cnblogs.com/yzlpersonal/p/5152427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!