抽象工厂,工厂方法,简单工厂对比

抽象工厂,工厂方法,简单工厂对比

创建型类模式将一个对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中。

创建型:使得动态创建对象更灵活

结构型:添加第三方类降低耦合

行为型:满足对象之间的动态行为特征

一、工厂方法-创建型类模式

http://blog.163.com/zhoumhan_0351/blog/static/3995422720104277410773

class Product{//定义产品的抽象类

public:

Product(){}

    //...一些操作

}

class Product1:public Product{//具体产品

public:

Product1(){}

//...一些操作

}

class Product2:public Product{//具体产品

public:

Product1(){}

//...一些操作

}

class Creator{//抽象类

public:

Creator(){}//可以定义一些缺省操作

virtual Product* Create(ProductId);//工厂方法

//...

//一些操作,比如对返回的Product进行操作,或者对建立Product

//的一些辅助操作,都可以声明为virtual

}

class Creator1:public Creator{//具体应用1

public:

Creator1(){}//可以定义一些缺省操作

    Product* Create(ProductId);//工厂方法

//...

//一些操作,比如对返回的Product进行操作,或者对建立Product

//的一些辅助操作,都可以声明为virtual

}

class Creator2:public Creator{//具体应用2

public:

Creator2(){}//可以定义一些缺省操作

    Product* Create(ProductId);//工厂方法

//...

//一些操作,比如对返回的Product进行操作,或者对建立Product

//的一些辅助操作,都可以声明为virtual

}

通过工厂方法,将一个对象的部分创建工作延迟到子类,解耦产品的实现和使用。方便了产品改变。

二、简单工厂

给工厂方法参数化,则称为简单工厂。

Product* Creator::Create(ProductId ID){

if(MINE==id) return new MyProduct;

if(YOURS==id) return new YourProduct;

//...

return 0;

类创建型模式之工厂方法(Factory Method)

http://blog.163.com/zhoumhan_0351/blog/static/39954227201031393276

三、抽象工厂-对象创建型模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

创建型模式简介

http://blog.163.com/zhoumhan_0351/blog/static/3995422720104277410773/

常常用工厂方法实现抽象工厂中具体的工厂。

class AbstractProductA{

public:

AbstractProductA(){}

//...

}

class AbstractProductA1:public AbstractProductA{

public:

AbstractProductA1(){}

//...

}

class AbstractProductA2:public AbstractProductA{

public:

AbstractProductA2(){}

//...

}

class AbstractProductB{

public:

AbstractProductB(){}

//...

}

class AbstractProductB1:public AbstractProductB{

public:

AbstractProductB1(){}

//...

}

class AbstractProductB2:public AbstractProductB{

public:

AbstractProductB2(){}

//...

}

class AbstractFactory{

AbstractFactory(){}

//下面每一个接口通常都是通过工厂方法来实现

virtual AbstractProductA* CreateProcudtA(){}//=0

virtual AbstractProductB* CreateProcudtB(){}//=0

//...

}

class ConcreteFactory1{

ConcreteFactory1(){}

//下面每一个接口通常都是通过工厂方法来实现

virtual AbstractProductA* CreateProcudtA(){}

virtual AbstractProductB* CreateProcudtB(){}

//...

}

class ConcreteFactory2{

ConcreteFactory2(){}

//下面每一个接口通常都是通过工厂方法来实现

virtual AbstractProductA* CreateProcudtA(){}

virtual AbstractProductB* CreateProcudtB(){}

//...

}

    由此,我们可以看到,抽象工厂作为对象型创建模式,主要提供创建所需对象的一系列接口(这些接口通常通过工厂方法实现),这些对象通过组合方式来组建对象。缺点是如果用户扩展接口,则抽象工厂需要改变。

而工厂方法作为类创建型模式,通过继承来创建对象,将一个类的实例化延迟到其子类。

两者都封装对象创建,来实现用户与所使用的具体产品(用户与产品)之间的解耦。

四、OO Principles

封装变化的量

组合优先于继承

面向接口编程,而非实现

寻求对象继承间的松耦合

Classes should be open for extension but closed for modification

几个与设计模式相关的基本概念和原则

http://blog.163.com/zhoumhan_0351/blog/static/399542272010230103414517

设计模式基本原则

http://blog.163.com/zhoumhan_0351/blog/static/3995422720105655438106

发布了81 篇原创文章 · 获赞 17 · 访问量 6012

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/103870835