设计模式(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;
}