工厂模式代码实现

引自:https://blog.csdn.net/weixin_35985385/article/details/81430545   

冰淇淋例子

  • 简单工厂模式(静态工厂):一个工厂可以生产多种产品,一个工厂类,多个产品类。

public interface IceCream{

    public void taste();

}

 

public class AppleIceCream implements IceCream{

    public void taste(){

         System.out.println("这是苹果口味冰淇淋");

    }

}

public class BananaIceCream implements IceCream{

    public void taste(){

         System.out.println("这是苹果口味冰淇淋");

    }

}

public class OrangeIceCream implements IceCream{

    public void taste(){

         System.out.println("这是橘子口味冰淇淋");

    }

}

public class IceCreamFactory{

    public static IceCream createIceCream(String type) {

        IceCream iceCream = null;

        switch(type){

            case "Apple" iceCream = new AppleIceCream();

            case "Banana" iceCream = new BananaIceCream();

            case "Orange" iceCream = new OrangeIceCream();

        }

        return iceCream;

    }

}

public static void main(String[] args){

        IceCream appleIceCream = IceCreamFactory.creamIceCream("Apple");
        appleIceCream.taste();

        IceCream bananaIceCream = IceCreamFactory.creamIceCream("Banana");
        bananaIceCream.taste();

        IceCream orangeIceCream = IceCreamFactory.creamIceCream("Orange");
        orangeIceCream.taste();

}

 

  • 工厂方法模式

public interface IceCream{

    public void taste();

}

AppleIceCream、BananaIceCream、OrangeIceCream

public interfaceIceCreamFactory{

    public void createIceCream();

}

public class AppleIceCreamFactory implements IceCreamFactory {

    public IceCream createIceCream() {
        return new AppleIceCream();
    }
}

public class BananaIceCreamFactory implements IceCreamFactory {

    public IceCream createIceCream() {
        return new BananaIceCream();
    }
}

public class OrangeIceCreamFactory implements IceCreamFactory{

    public IceCream createIceCream() {
        return new OrangeIceCream();
    }
}

// 客户端代码
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {

        //生产苹果味冰激凌
        IceCreamFactory appleFactory = new AppleIceCreamFactory();
        IceCream appleIceCream = appleFactory.createIceCream();
        appleIceCream.taste();

        //生产香蕉口味冰激凌
        IceCreamFactory  bananaFactory = new BananaIceCreamFactory();
        IceCream bananaIceCream = bananaFactory.createIceCream();
        bananaIceCream.taste();

        //生产橘子口味冰激凌
        IceCream orangeIceCream = new OrangeIceCreamFactory().createIceCream();
        orangeIceCream.taste();
    }
}

  • 抽象工厂模式

public interface BigIceCream{

    public void taste();

}

 

public interface SmallIceCream{

    public void taste();

}

public class BigAppleIceCream implements BigIceCream {

    public void taste() {
        System.out.println("这是苹果味冰激凌(大份)");
    }
}

public class SmallAppleIceCream implements SmallIceCream {

    public void taste() {
        System.out.println("这是苹果味冰激凌(小份)");
    }
}

//后边还有四个类BigBananaIceCream、SmallBananaIceCream、BigOrangeIceCream、SmallOrangeIceCream
---------------------
作者:LSZJXin
来源:CSDN
原文:https://blog.csdn.net/weixin_35985385/article/details/81430545
版权声明:本文为博主原创文章,转载请附上博文链接!

public interface IceCreamFactory {

    public BigIceCream createBigIceCream();

    public SmallIceCream createSmallIceCream();

}

public class AppleIceCreamFactory implements IceCreamFactory {

    public BigIceCream createBigIceCream() {
        return new BigAppleIceCream();
    }

    public SmallIceCream createSmallIceCream() {
        return new SmallAppleIceCream();
    }
}

public class BananaIceCreamFactory implements IceCreamFactory {

    public BigIceCream createBigIceCream() {
        return new BigBananaIceCream();
    }

    public SmallIceCream createSmallIceCream() {
        return new SmallBananaIceCream();
    }
}

public class OrangeIceCreamFactory implements IceCreamFactory {

    public BigIceCream createBigIceCream() {
        return new BigOrangeIceCream();
    }

    public SmallIceCream createSmallIceCream() {
        return new SmallOrangeIceCream();
    }
}
---------------------
作者:LSZJXin
来源:CSDN
原文:https://blog.csdn.net/weixin_35985385/article/details/81430545
版权声明:本文为博主原创文章,转载请附上博文链接!

public class Client {

    public static void main(String[] args) {

        //生产苹果味冰激凌
        IceCreamFactory appleIceCreamFactory = new AppleIceCreamFactory();
        BigIceCream appleBigIceCream = appleIceCreamFactory.createBigIceCream();
        SmallIceCream appleSmallIceCream = appleIceCreamFactory.createSmallIceCream();
        appleBigIceCream.taste();
        appleSmallIceCream.taste();

        //生产香蕉味冰激凌
        IceCreamFactory bananaIceCreamFactory = new BananaIceCreamFactory();
        BigIceCream bananaBigIceCream = bananaIceCreamFactory.createBigIceCream();
        SmallIceCream bananaSmallIceCream = bananaIceCreamFactory.createSmallIceCream();
        bananaBigIceCream.taste();
        bananaSmallIceCream.taste();

        //生产橘子味冰激凌
        IceCreamFactory orangeIceCreamFactory = new OrangeIceCreamFactory();
        BigIceCream orangeBigIceCream = orangeIceCreamFactory.createBigIceCream();
        SmallIceCream orangeSmallIceCream = orangeIceCreamFactory.createSmallIceCream();
        orangeBigIceCream.taste();
        orangeSmallIceCream.taste();
    }
}
---------------------
作者:LSZJXin
来源:CSDN
原文:https://blog.csdn.net/weixin_35985385/article/details/81430545
版权声明:本文为博主原创文章,转载请附上博文链接!

抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关的对象,而无需指定它们具体的类。在C++中,我们可以使用继承和模板来实现这个模式。以下是一个简单的抽象工厂模式代码实现: ```cpp // 抽象产品接口 class ProductInterface { public: virtual ~ProductInterface() = default; virtual void use() const = 0; }; // 具体产品接口 class ConcreteProductA : public ProductInterface { public: void use() const override { std::cout << "Using ConcreteProductA" << std::endl; } }; class ConcreteProductB : public ProductInterface { public: void use() const override { std::cout << "Using ConcreteProductB" << std::endl; } }; // 抽象工厂 class AbstractFactory { public: virtual ~AbstractFactory() = default; virtual ProductInterface* createProductA() const = 0; virtual ProductInterface* createProductB() const = 0; }; // 具体工厂 class ConcreteFactoryA : public AbstractFactory { public: ProductInterface* createProductA() const override { return new ConcreteProductA(); } ProductInterface* createProductB() const override { return new ConcreteProductB(); } }; // 使用抽象工厂 int main() { AbstractFactory* factory = new ConcreteFactoryA(); ProductInterface* productA = factory->createProductA(); productA->use(); // 输出: Using ConcreteProductA ProductInterface* productB = factory->createProductB(); productB->use(); // 输出: Using ConcreteProductB delete productA; delete productB; delete factory; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值