java工程模式写法,java设计模式_工厂模式

java设计模式_工厂模式

工厂模式

工厂模式主要是实现了创建和调用者的分离

核心本质:

实例化对象,用工厂方法代替new操作

将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦

工厂模式(factory)大概分为三种:

简单工厂模式:

用来生产同一等级结构中的任意产品(对于增加新的产品,需要修改已有代码)

工厂方法模式

用来生产同一等级结构中的固定产品(支持增加任意产品)

抽象工厂模式

用来生产不用产品族的全部产品(对于增加新的产品无能为力;支持增加产品族)

简单工厂

简单工厂也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数不同来返回不同的对象实例

缺点是对于增加新产品无能为力,不修改代码就不能扩展,必须修改已有的代码。

例如:

有这么几个东西,一个Car接口,还有实现了Car接口的宝马和奥迪类

package com.yibobo.factory;

public interface Car {

void run();

}

package com.yibobo.factory;

public class Audi implements Car{

@Override

public void run() {

System.out.println("奥迪在跑");

}

}

package com.yibobo.factory;

public class BMW implements Car {

@Override

public void run() {

System.out.println("宝马在跑");

}

}

此时,传统的new操作是这样的

package com.yibobo.factory;

public class TestCar {

public static void main(String[] args) {

Car c1 = new Audi();

Car c2 = new BMW();

c1.run();

c2.run();

}

}

这样,我这个TestCar需要知道:Car类、Audi类、BMW类

那以后要是这Car有一百个实现类呢= =这个时候,我要是想要new一个Car的实现类出来,但又不想要和这一堆复杂的构造逻辑耦合,怎么办?使用工厂模式嘛

工厂类最大好处让是使用者和对象的创建分离。使用者再也不担心,对象是怎么创建的。用上接口,使用者更不需要知道对象是谁。

我只要这样创建出一个工厂类(我这用的是IF…ELSE,用switch啥的都行):

package com.yibobo.factory;

public class CarFactory {

public static Car creatCar(String str){

if (str.equals("奥迪")){

return new Audi();

}else if (str.equals("宝马")){

return new BMW();

}else{

return null;

}

}

}

这一切就解决了

创建Car实现类的时候只需要这样:

package com.yibobo.factory;

public class TestCar {

public static void main(String[] args) {

Car c1 = CarFactory.creatCar("奥迪");

Car c2 = CarFactory.creatCar("宝马");

c1.run();

c2.run();

}

}

这里与我调用者有关系的只有Car接口、CarFacory工厂类、以后就是有一万个不同的实现类也和我调用者没半毛钱关系

这样就隐藏了实现类的细节,调用者也不需要知道这个对象是咋创建的

你需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。

我就一买家,只要这车开的动就行了。我还自个造个车子?

这就是简单工厂了。也是用的最多的工厂

工厂方法模式

为了避免简单工厂模式的缺点、不完全满足OCP

工厂方法模式和简单工厂模式最大的不同在于,简单工程模式只有一个工厂类(对于一个项目或一个独立模块而言),而工厂方法模式有一组实现了相同接口的工厂类

工厂类大概这样:

package com.yibobo.factorymethod;

public interface CarFactory {

Car createCar();

}

在这个抽象的工厂类基础上,可以添加无数个具体的创建某个产品的实现类

比如:

package com.yibobo.factorymethod;

public class createAudi implements CarFactory{

@Override

public Car createCar() {

return new Audi();

}

}

package com.yibobo.factorymethod;

public class createBMW implements CarFactory{

@Override

public Car createCar() {

return new BMW();

}

}

创建对象的话就这样:

package com.yibobo.factorymethod;

public class TestCar {

public static void main(String[] args) {

Car c1 = new createAudi().createCar();

Car c2 = new createBMW().createCar();

c1.run();

c2.run();

}

}

在设计模式上来说最好选择用工厂方法模式,虽说工厂方法模式便于添加产品,但是实际上一般都用简单工厂,因为工厂方法模式的类肯定会挺多的,难的管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值