设计模式(2)-抽象工厂模式及实现

设计模式(2)-抽象工厂及实现


基本概念

提供了一个接口,用于创建一系列相关或相互依赖的对象。通过使用抽象工厂接口及其具体实现,可以将对象的创建与客户端代码分离,从而实现系统的松耦合。
优点:
● 产品族一致性:抽象工厂确保创建的产品是一组相关的产品族,保证了这些产品之间的一致性。
● 松耦合:客户端代码不需要直接依赖于具体产品,只需要通过抽象工厂接口创建产品,从而降低了代码的耦合度。
● 可扩展性:增加新的产品族或产品变得相对容易,只需要添加新的具体工厂和产品类即可,不需要修改现有代码。
缺点:
● 限制:抽象工厂模式要求系统中的每个产品族都必须有一个对应的具体工厂,这可能增加了系统的复杂性。

https://gitee.com/want-to-lose-another-30-jin/design-pattern-implementation

设计模式具体实现


角色

1、抽象工厂(Abstract Factory):定义创建产品的接口。
2、具体工厂(Concrete Factory):实现抽象工厂的接口,生成具体的产品。
3、抽象产品(Abstract Product):定义产品对象的接口。
4、具体产品(Concrete Product):实现抽象产品的接口,具体实现产品类。

java实现


package com.shejimoshi.chouxianggongchangmoshi;

// 抽象产品:椅子
public interface Chair {
    void design();
}
package com.shejimoshi.chouxianggongchangmoshi;
// 抽象产品:桌子
public interface Table {
    void design();
}



package com.shejimoshi.chouxianggongchangmoshi;

// 抽象工厂
public interface FurnitureFactory {
    Chair createChair();
    Table createTable();
}

package com.shejimoshi.chouxianggongchangmoshi;
// 具体产品:古典风格椅子
public class ClassicChair implements Chair {
    @Override
    public void design() {
        System.out.println("设计古典椅子");
    }
}

package com.shejimoshi.chouxianggongchangmoshi;

// 具体产品:古典风格桌子
public class ClassicTable implements Table {
    public void design() {
        System.out.println("设计古典桌子");
    }
}

package com.shejimoshi.chouxianggongchangmoshi;
// 具体产品:现代风格椅子
public class ModernChair implements Chair {
    public void design() {
        System.out.println("设计现代椅子");
    }
}

package com.shejimoshi.chouxianggongchangmoshi;
// 具体产品:现代风格桌子
public class ModernTable implements Table{
    @Override
    public void design() {
        System.out.println("设计现代桌子");
    }
}

package com.shejimoshi.chouxianggongchangmoshi;
// 具体工厂:现代风格家具工厂
public class ModernFurnitureFactory implements FurnitureFactory{
    public Chair createChair() {
        return new ModernChair();
    }

    public Table createTable() {
        return new ModernTable();
    }
}

package com.shejimoshi.chouxianggongchangmoshi;
// 具体工厂:古典风格家具工厂
public class ClassicFurnitureFactory implements FurnitureFactory {
    public Chair createChair() {
        return new ClassicChair();
    }

    public Table createTable() {
        return new ClassicTable();
    }
}

package com.shejimoshi.chouxianggongchangmoshi;

public class client {
    // 客户端代码
    public static void main(String[] args) {
        //FurnitureFactory factory = new ModernFurnitureFactory();
        FurnitureFactory factory = new ClassicFurnitureFactory();
        Chair chair = factory.createChair();
        chair.design();
        Table table = factory.createTable();
        table.design();
    }
}

c++实现


#include<iostream>

// 抽象产品:椅子
class Chair 
{
public:
    virtual void design() = 0;
    virtual ~Chair() {}
};

// 具体产品:现代风格椅子
class ModernChair : public Chair 
{
public:
    void design() override 
    {
        std::cout << "设计现代椅子" << std::endl;
    }
};

// 具体产品:古典风格椅子
class ClassicChair : public Chair 
{
public:
    void design() override 
    {
        std::cout << "设计古典椅子" << std::endl;
    }
};

// 抽象产品:桌子
class Table 
{
public:
    virtual void design() = 0;
    virtual ~Table() {}
};

// 具体产品:现代风格桌子
class ModernTable : public Table 
{
public:
    void design() override 
    {
        std::cout << "设计现代桌子" << std::endl;
    }
};

// 具体产品:古典风格桌子
class ClassicTable : public Table 
{
public:
    void design() override 
    {
        std::cout << "设计古典桌子" << std::endl;
    }
};

// 抽象工厂
class FurnitureFactory 
{
public:
    virtual std::unique_ptr<Chair> createChair() = 0;
    virtual std::unique_ptr<Table> createTable() = 0;
    virtual ~FurnitureFactory() {}
};

// 具体工厂:现代风格家具工厂
class ModernFurnitureFactory : public FurnitureFactory 
{
public:
    std::unique_ptr<Chair> createChair() override
    {
        return std::make_unique<ModernChair>();
    }

    std::unique_ptr<Table> createTable() override 
    {
        return std::make_unique<ModernTable>();
    }
};

// 具体工厂:古典风格家具工厂
class ClassicFurnitureFactory : public FurnitureFactory 
{
public:
    std::unique_ptr<Chair> createChair() override 
    {
        return std::make_unique<ClassicChair>();
    }

    std::unique_ptr<Table> createTable() override 
    {
        return std::make_unique<ClassicTable>();
    }
};

// 客户端代码
int main() {
    std::unique_ptr<FurnitureFactory> factory = std::make_unique<ModernFurnitureFactory>();
    auto chair = factory->createChair();
    chair->design();
    auto table = factory->createTable();
    table->design();

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值