学习笔记--设计模式之工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 使用该模式的主要目的是为了解耦和。
工厂模式可以分为三类:
1)简单工厂模式(Simple Factory)

    一个抽象产品类,可以派生出多个具体产品类。   
    一个具体工厂类。   
    具体工厂类能创建具体产品类的实例。 

public class Customer {

    public static void main(String[] args) 
    {
        PhoneFactory factory = new PhoneFactory();
        Phone mi4 = factory.createPhone("xiaomi");
        Phone _4s = factory.createPhone("iphone");
        Phone p8 = factory.createPhone("huawei");

    }

}
class PhoneFactory //工厂类
{
    public Phone createPhone(String brand)
    {
        switch(brand)
        {
        case "iphone":
            return new Iphone();
        case "xiaomi":
            return new XiaoMi();
        case "huawei":
            return new HuaWei();
        default:
            break;
        }
        return null;
    }
}

class Phone//抽象产品
{
    public Phone(){}
}
class Iphone extends Phone//具体产品
{
    public Iphone(){System.out.println("Create Iphone");}
}
class XiaoMi extends Phone//具体产品
{
    public XiaoMi(){System.out.println("Creat XiaoMi");}
}
class HuaWei extends Phone//具体产品
{
    public HuaWei() {System.out.println("Creat HuaWei");}
}   

从开闭原则(对扩展开放,对修改封闭)上来分析下简单工厂模式。当客户不再满足现有的车型号的时候,想要一种速度快的新型车,只要这种车符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。所以对产品部分来说,它是符合开闭原则的;但是工厂部分好像不太理想,因为每增加一个品牌,都要在工厂类中增加相应的创建业务逻辑(createBMW(int type)方法需要新增case),这显然是违背开闭原则的。可想而知对于新产品的加入,工厂类是很被动的。对于这样的工厂类,我们称它为全能类或者上帝类。 这时工厂方法模式作出现了, 工厂类定义成了接口,而每新增的车种类型,就增加该车种类型对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码。

2)工厂方法模式(Factory Method)

    一个抽象产品类,可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   

    class Phone//抽象产品
{
    public Phone(){}
}
class Iphone extends Phone//具体产品
{
    public Iphone(){System.out.println("Create Iphone");}
}
class XiaoMi extends Phone//具体产品
{
    public XiaoMi(){System.out.println("Creat XiaoMi");}
}
class HuaWei extends Phone//具体产品
{
    public HuaWei() {System.out.println("Creat HuaWei");}
}

interface PhoneFactory//抽象工厂
{
    Phone creatPhone();
}
class IphoneFactory implements PhoneFactory //具体工厂
{
    public Phone creatPhone()
    {
        return new Iphone();
    }
}
class XiaoMiFactory implements PhoneFactory //具体工厂
{
    public Phone creatPhone()
    {
        return new XiaoMi();
    }
}
class HuaWeiFactory implements PhoneFactory //具体工厂
{
    public Phone creatPhone()
    {
        return new HuaWei();
    }
}

public class Customer //客户端
{
    public static void main(String[] args) 
    {
        Phone mi4 = new XiaoMiFactory().creatPhone();
        Phone _4s = new IphoneFactory().creatPhone();
        Phone p8 = new HuaWeiFactory().creatPhone();
    }
}

工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口,但使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。

3)抽象工厂模式(Abstract Factory)

    多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。   
    一个抽象工厂类,可以派生出多个具体工厂类。   
    每个具体工厂类可以创建多个具体产品类的实例。   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值