手撸Java工厂模式

Java工厂模式

1、 手写简单工厂(抽象类)
2、 手写工厂模式(接口类)
3、 手写抽象工厂模式

手写简单工厂:

定义抽象类abstract,同时定义抽象方法

/**
 * 面条的抽象类
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:11
 * @Version: 1.0
 */
public abstract class INoodler {

    //该类描述了面条的品类
    public abstract String getDes();
}

上面我们定义的抽象类,需要继承

/**
 * 面条品系-有兰州拉面
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:14
 * @Version: 1.0
 */
public class LzNoodler extends INoodler{

    @Override
    public String getDes() {
        return "兰州拉面很好吃,味道是香";
    }
}

工厂

/**
 * 面条工厂 --可以煮哪几种面条
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:16
 * @Version: 1.0
 */
public class SimpleNoodlerFactory {

    /**
     * 店里的面条的种类
     * @param type 1:兰州
     * @return
     */
    public static INoodler createNoodler(int type){
        switch (type){
            case 1:
                return new LzNoodler();//兰州拉面
            default:
                return null;
        }
    }
}
/**
 * 客户来店里点菜 (利用的是抽象类)
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:21
 * @Version: 1.0
 */
public class Customer {

    public static void main(String[] args) {

        //A--点拉州拉面
        INoodler noodler = SimpleNoodlerFactory.createNoodler(1);
        System.out.println(noodler.getDes());

    }
}

手写工厂模式(接口类)

定义一个接口

/**
 * 定义面条 接口
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:25
 * @Version: 1.0
 */
public interface INoodlerFactory {
    //下面定义的是面条的属性

    //味道
    public String getDesc();
}

/**
 * 实现接口
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:28
 * @Version: 1.0
 */
public class MessageFactory implements INoodlerFactory{

    /**
     * 面的味道
     * @return
     */
    public String getDesc() {
        return "味道是辣的";
    }

}
/**
 * 通过接口的模式实现工厂模式
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:31
 * @Version: 1.0
 */
public class CustomerEat {

    public static void main(String[] args) {
        //客户点面
        INoodlerFactory iNoodlerFactory = new MessageFactory();
        System.out.println(iNoodlerFactory.getDesc());
    }
}

手写抽象工厂模式

定义产品1

/**
 * IProduct1 产品1
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:44
 * @Version: 1.0
 */
public interface IProduct1 {
    public String show();//特性
}
/**
 * IProduct1 产品2
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:44
 * @Version: 1.0
 */
public interface IProduct2 {
    public String show();//特性
}

实现接口

public class Product1 implements IProduct1 {

    public String show() {
        return "我是产品1";
    }
}
public class Product2 implements IProduct2 {

    public String show() {
        return "我是产品2";
    }
}

定义工厂用户管理产品接口

/**
 * 工厂 生产 产品1 和产品 2
 * @Date: 2021/9/23 0023 下午 14:48
 * @Version: 1.0
 */
public interface IFactory {

    public IProduct1 createProduct1();

    public IProduct2 createProduct2();

}

实现工厂类的接口

public class Factory implements IFactory {

    public IProduct1 createProduct1() {
        return new Product1();
    }

    public IProduct2 createProduct2() {
        return new Product2();
    }
}

验证

/**
 * 用户在 店里 选择他想要的产品
 * @Description:
 * @Date: 2021/9/23 0023 下午 14:51
 * @Version: 1.0
 */
public class CustomerControler {
    public static void main(String[] args) {
        //在工厂里面选择 1-2
        IFactory factory = new Factory();
        System.out.println(factory.createProduct1().show());
        System.out.println(factory.createProduct2().show());

        //我只需要去维护我工厂能生产的产品就可以
        //不管我们用什么样设计模式,其实都是为了解决 耦合问题
    }
}

总结:无论是使用简单工厂还是使用工厂模式,他们都属于工厂模式,他们的目的是为了解决耦合问题,

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java工厂模式是一种创建对象的设计模式,它提供了一种将对象的创建与使用分离的方式。通过使用工厂模式,我们可以通过调用工厂类的方法来创建对象,而不需要直接使用new关键字实例化对象。 在Java中,工厂模式通常包括以下几个角色: 1. 抽象产品(Product):定义了产品的接口,是具体产品类的父类或接口。 2. 具体产品(Concrete Product):实现了抽象产品接口的具体类。 3. 抽象工厂(Abstract Factory):定义了创建产品的接口,可以是抽象类或接口。 4. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体产品的对象。 下面是一个简单的Java工厂模式实例: 首先,我们定义一个抽象产品接口(Product): ```java public interface Product { void use(); } ``` 然后,我们定义两个具体产品类(Concrete Product)实现抽象产品接口: ```java public class ConcreteProductA implements Product { @Override public void use() { System.out.println("使用产品A"); } } public class ConcreteProductB implements Product { @Override public void use() { System.out.println("使用产品B"); } } ``` 接下来,我们定义一个抽象工厂接口(Abstract Factory): ```java public interface Factory { Product createProduct(); } ``` 然后,我们定义两个具体工厂类(Concrete Factory)实现抽象工厂接口: ```java public class ConcreteFactoryA implements Factory { @Override public Product createProduct() { return new ConcreteProductA(); } } public class ConcreteFactoryB implements Factory { @Override public Product createProduct() { return new ConcreteProductB(); } } ``` 最后,我们可以使用具体工厂来创建具体产品对象: ```java public class Main { public static void main(String[] args) { Factory factoryA = new ConcreteFactoryA(); Product productA = factoryA.createProduct(); productA.use(); Factory factoryB = new ConcreteFactoryB(); Product productB = factoryB.createProduct(); productB.use(); } } ``` 这样,通过工厂模式,我们可以通过调用具体工厂的方法来创建具体产品的对象,而不需要直接使用new关键字实例化对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值