第二个设计模式:工厂方法

 
上一节中已经介绍了简单工厂,我想大家应该有一定认识了。然后简单工厂有它自身的局限性 ~ 今天继续为大家介绍工厂模式之工厂方法  .
UML 示意图:
组成部分:
1. 抽象工厂
2. 具体工厂
3. 抽象产品
4. 具体产品
代码例子:
1.       抽象工厂
package com.eekq.creator.factorymethod;
 
public interface IFactory {
    //抽象工厂,工厂方法
    public IProduct factory();
}
2.       抽象产品
package com.eekq.creator.factorymethod;
 
public interface IProduct {
    //抽象产品,抽象方法
    public void print();
}
3.        具体产品:可以有N个同类产品,在这里我以两个产品为例
产品1
package com.eekq.creator.factorymethod;
 
public class Product1 implements IProduct {
 
    public void print() {
        // TODO 自动生成方法存根
        //示例方法
        System. out .println( "Product1.print()" );
    }
}
产品2
package com.eekq.creator.factorymethod;
 
public class Product2 implements IProduct {
 
    public void print() {
        // TODO 自动生成方法存根
        System. out .println( "Product2.print()" );
    }
 
}
4.        具体工厂:针对具体产品的具体工厂,有N类产个产品就有N个具体工厂
工厂1
package com.eekq.creator.factorymethod;
 
public class Factory1 implements IFactory {
 
    public IProduct factory() {
        // TODO 自动生成方法存根
        return new Product1();
    }
 
}
工厂2
package com.eekq.creator.factorymethod;
 
public class Factory2 implements IFactory{
 
    public IProduct factory() {
        // TODO 自动生成方法存根
        return new Product2();
    }
 
}
5. 客户端的调用
package com.eekq.creator.factorymethod;
 
public class Main {
 
    /**
      * @param args
      */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        //工厂方法示例
        IFactory factory = new Factory1();
        IProduct product1 = factory.factory(); //获取工厂1
        product1.print(); //执行具体产品功能
       
        IFactory factory2 = new Factory2();
        IProduct product2 = factory2.factory(); //获取工厂1
        product2.print(); //执行具体产品功能
 
    }
 
}
6. 输出结果
Product1.print()
Product2.print()
7. 总结
工厂方法模式保持了简单工厂的优点,同时克服了简单工厂的缺点。工厂方法的核心在于抽象工厂,这样如果有新的产品加入,就实现抽象工厂就可以了。这也具有了可扩展性,同时也满足了‘开-闭’原则
 作者:飞行鱼 QQ:6868861 推荐J2EE群:7715552


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值