您的位置:首页 > 其它

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

2016-05-18 10:18 309 查看
工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 使用该模式的主要目的是为了解耦和。

工厂模式可以分为三类:

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)

多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息