java静态工厂方法模式_设计模式:简单工厂模式(静态工厂方法模式)

简单工厂的构成包括三个角色:

1)抽象产品类

2)具体产品类(继承抽闲产品类)

3)工厂类(生产具体产品)

具体代码实现

c6c138858840fd2cd290fbbf6b816596.png

1、抽象产品类

/**

* 抽象类

*/

public abstract class Car {

/**

* 产品抽象方法,将会由具体产品类实现

*/

public abstract void driving();

}

2、具体产品类

/**

* 具体产品类BenZCar

*/

public class BenZCar extends Car {

@Override

public void driving() {

System.out.println("BenZCar is Driving!!!");

}

}

/**

* 具体产品类BMWCar

*/

public class BMWCar extends Car {

@Override

public void driving() {

System.out.println("BMWCar is Driving!!!");

}

}

3、工厂类

/**

* 简单工厂类

*/

public class CarFactory {

public static Car create(String type) {

Car car = null;

switch (type) {

case "bmw":

car = new BMWCar();

break;

case "benz":

car = new BenZCar();

break;

}

return car;

}

}

4、调用(这里使用AndroidStudio代码测试,如果是java的可以在main函数中测试)

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViewById(R.id.id_bmw).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

CarFactory.create("bmw").driving();

}

});

findViewById(R.id.id_benz).setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

CarFactory.create("benz").driving();

}

});

}

}

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/id_bmw"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="制造一个BWM汽车"

android:layout_marginBottom="15dp"/>

android:id="@+id/id_benz"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="制造一个Benz汽车"

android:layout_marginBottom="15dp"/>

5、界面

4bc89a982c684db20c3c093a55e9303c.png

6、测试结果

08-20 10:59:55.001 3660-3660/com.tech.aile.designpatterns I/System.out: BMWCar is Driving!!!

08-20 10:59:56.573 3660-3660/com.tech.aile.designpatterns I/System.out: BenZCar is Driving!!!

7、使用场景

1)工厂类创建的具体对象要较少,不适用子类过多,子类层级过深的场景。

2)看客户只需要传入什么类型的参数,不用关注创建对象的逻辑。

8、优点

根据参数类型获取实例,不用关注具体细节,降低了耦合

9、缺点

具体的产品类型在编译期间已经确定,不能更改,如果需要新增具体产品就需要修改工厂类,添加新具体产品类,违背了封闭开放原则;

简单工厂必须知道所有需要生产具体产品类,不适用子类过多,子类层级过深的场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值