建造者模式和抽象工厂模式

1、建造者模式

一个对象的构建比较复杂,将一个对象的构建和对象的表示进行分离!!!

2、具体实现

(1)、代码如下

#include<iostream>
#include<string>
using namespace std;

class House{
    public:
        void setDoor(string door){
            this->m_door = door;
        }   
        void setWall(string wall){
            this->m_wall = wall;
        }   
        void setWindow(string window){
            this->m_window = window;
        }   
    public:
        string getDoor(){
            return m_door;
        }   
        string getWall(){
            return m_wall;
        }   
        string getWindow(){
            return m_window;
        }
    private:
        string m_door;
        string m_wall;
        string m_window;
};

//请工程队来建造房子
class Build{
    public:
        House *setHouse(){

        }
    private:
};
int main(void){
    //这样写不好,是客户直接造房子;
    House *house = new House;
    house->setDoor("门");
    house->setWall("墙面");
    house->setWindow("窗口");

    delete house;

    return 0;     
}

3、抽象工厂

 只能生产一个产品;

4、具体实现

(1)、代码如下

#include<iostream>
using namespace std;

class Fruit;
class AbstractFactory{
    public:           
        virtual Fruit *CreateBanana() = 0;
        virtual Fruit *CreateApple() = 0;
    private:
};

class Fruit{
    public:
        virtual void sayname() = 0;
    private:
};

class NorthBanana : public Fruit{
    public:
        virtual void sayname(){
            cout<<"我是北方香蕉"<<endl;
        }   
};
class NorthApple : public Fruit{
    public:
        virtual void sayname(){
            cout<<"我是北方苹果"<<endl;
        }
};

class SouthBanana : public Fruit{
    public:
        virtual void sayname(){
            cout<<"我是南方香蕉"<<endl;
        }
};

class SouthApple : public Fruit{
    public:
        virtual void sayname(){
            cout<<"我是南方苹果"<<endl;
        }
};

class NorthFactory : public AbstractFactory{
    public:
        virtual Fruit *CreateBanana(){
            return new NorthBanana;
        }
        virtual Fruit *CreateApple(){
            return new NorthApple;
        }
    private:
};

class SouthFactory : public AbstractFactory{
    public:
        virtual Fruit *CreateBanana(){
            return new SouthBanana;
        }
        virtual Fruit *CreateApple(){
            return new SouthApple;
        }
    private:
};
int main(void){
    Fruit *fruit = NULL;
    AbstractFactory *af = NULL;
    //---------------------------
    af = new SouthFactory;
    fruit = af->CreateApple();
    fruit->sayname();
    fruit = af->CreateBanana();
    fruit->sayname();
    //---------------------------
    af = new NorthFactory;      
    fruit = af->CreateApple();
    fruit->sayname();
    fruit = af->CreateBanana();
    fruit->sayname();

    delete af;

    return 0;      
}

(2)、运行结果

(3)、抽象模式

缺点:抽象工厂的产品线都被写死了;只能生产这2种产品;

时间: 2024-11-03 20:45:11

建造者模式和抽象工厂模式的相关文章

简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式.抽象工厂模式.工厂方法模式,这三种工厂模式都属于设计模式中的创建型模式,它们在形式和特点上也多少有些相似,其最终目的都是帮我们将对象的实例化部分取出来,进而优化系统架构,增强系统的扩展性,也就是说更好的体现开放封闭原则. 简单工厂模式: 概念: 简单工厂模式是类的创建模式,又叫做静态工厂方法模式,是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色.抽象产品角色以及具体产品角色. 结构图: 分析: 一: 简单工厂类是整个模式的关键所在,包含了必要的逻辑判断,根据

PHP简单工厂模式、工厂方法模式和抽象工厂模式比较

PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改. 根据抽象程度不同,PHP工厂模式分为:简单工厂模式.工厂方法模式和抽象工厂模式 简单工厂模式: /******代码在原文还是git上都有osgit地址 https://git.oschina.net/mjw/pattern.git  *******/ /** *简单工厂模式与工厂方法模式比较

工厂方法模式And抽象工厂模式

一.工厂方法模式 简单工厂模式的缺陷就是类的创建太过于依赖工厂,一旦需要进行程序扩展,就必须修改工厂类的代码 这违背了背包原则. 而工厂方法模式针对这一问题进行了改进. public interface Sender { public void send(); } public interface producer { public Sender produce(); } public class MailFactory implements producer{ public Sender pr

java设计模式 -------- 创建模式 之 抽象工厂模式

本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 工厂方法模式和抽象工厂模式不好区分清楚: 工厂方法模式特点: 1. 一个抽象产品类,可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式特点: 1. 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类. 2. 一个抽象工厂类,可以派生出多个具体工厂类. 3. 每个具体工厂类可以创建多个

工厂模式和抽象工厂模式

工厂模式: 定义一个用于创建对象的接口,让他的子类决定实例化哪个类.使类的实例化延迟到子类. 1.普通的工厂模式: public class GoodProduct implements Product { private String prodInfo = "Iam the good prod"; public String getProductInfo() { // TODO Auto-generated method stub return this.prodInfo; } pu

【C#设计模式——创建型模式】抽象工厂模式

抽象工厂模式比工厂模式具有更高层次的抽象性.当要返回一系列相关类中的某一个,而每个类都能根据需要返回不同的对象时,可以选择这种模式.直接进入示例. 示例描述:完成花园的规划,多种花园种类,每个里面多种植物 编写一个基类Garden,Garden就是抽象工厂.它定义了具体类中的方法,并返回一系列相关类中的某个类. public class Garden { protected Plant center, shade, border; protected bool showCenter, showS

设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

原文地址:http://blog.chinaunix.net/uid-25958655-id-4243289.html 简单工厂模式 当需要加法类的时候,调用工厂类的CreateOperate(),要指定制造的Product 例如在大话设计模式P11给的运算工厂例子: public static Operation createOperate(string operate) { Operation oper = null; 12 switch (operate) { case "+":

人人都能看懂的工厂方法模式和抽象工厂模式的区别

设计模式中的工厂方法模式和抽象工厂模式一直不知不觉地使用在程序设计中,但是就是经常只有实践没有进行理论指导,所以感觉有一点半路子出家而没有系统学习过的不踏实的感觉.现在总结了一下之前项目中使用过的抽象工厂模式,加强对创建型模式中工厂模式的理解. 先举个栗子感性的理解工厂方法模式和抽象工厂模式这两者的区别. 有一个富商,在深圳开了三个手机厂,分别代工苹果手机,三星手机,华为手机.富商经常视察这3个厂,在苹果手机厂就说"大家要做好苹果手机",在三星厂就说"大家要做好三星手机&qu

简单工厂模式、工厂方法模式和抽象工厂模式-设计模式学习

1.简单工厂模式 简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有

PHP简单工厂模式、工厂方法模式和抽象工厂模式

PHP工厂模式概念:工厂模式是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改.根据抽象程度不同,PHP工厂模式分为:简单工厂模式.工厂方法模式和抽象工厂模式 简单工厂模式: /** *简单工厂模式与工厂方法模式比较. *简单工厂又叫静态工厂方法模式,这样理解可以确定,简单工厂模式是通过一个静态方法创建对象的. */ interface people { function