欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java设计模式(简单工厂模式+工厂方法模式)

程序员文章站 2022-03-10 17:16:26
简单工厂模式1.产品类0.抽象产品类public interface Car { void getname();}1.产品类1public class WuLing implements Car { @Override public void getname() { System.out.println("五菱宏光"); }}2.产品类2public class Tesla implements Car { @Override...

简单工厂模式

1.产品类

0.抽象产品类
public interface Car { void getname(); } 1.产品类1
public class WuLing implements Car { @Override
    public void getname() { System.out.println("五菱宏光"); } } 2.产品类2
public class Tesla implements Car { @Override
    public void getname() { System.out.println("特斯拉"); } } 3.产品类3(后续要添加的类)
public class DaZhong implements Car { @Override
    public void getname() { System.out.println("大众"); } } 

2.工厂类

//简单工厂模式,添加一个新的产品类,需要修改代码
public class CarFactory { //方法一
    public static Car getCar(String carName){ if(carName.equals("五菱宏光")){ return new WuLing(); }else if(carName.equals("特斯拉")){ return new Tesla(); } return null; } //方法二
    public static Car getWuLing(){ return new WuLing(); } public static Car getTesLa(){ return new Tesla(); } public static Car getDaZhong(){ return new DaZhong(); } } 

3.消费者

public class Constumer { public static void main(String[] args){ //方法一
        Car car = CarFactory.getCar("五菱宏光"); Car car2 = CarFactory.getCar("特斯拉"); car.getname(); car2.getname(); //方法二
        Car wuLing = CarFactory.getWuLing(); Car daZhong = CarFactory.getDaZhong(); Car tesLa = CarFactory.getTesLa(); wuLing.getname(); daZhong.getname(); tesLa.getname(); } } 

简单工厂模式又称静态工厂方法模式,它存在的目的很简单:定义一个用于创建对象的工厂类。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,用来创建产品
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

工厂方法模式

1.产品类

0.抽象产品类
public interface Car { void getname(); } 1.产品类1
public class WuLing implements Car { @Override
    public void getname() { System.out.println("五菱宏光"); } } 2.产品类2
public class Tesla implements Car { @Override
    public void getname() { System.out.println("特斯拉"); } } 3.产品类3(后续要添加的类)
public class DaZhong implements Car { @Override
    public void getname() { System.out.println("大众"); } } 

2.工厂类

0.抽象工厂类
public interface CarFactory { Car getCar(); //static Car getCar(); 错误:static methods in interfaces should have a body
1.工厂1
public class WuLingFactory implements CarFactory{ @Override
    public Car getCar() { return new WuLing(); } } 2.工厂2
public class TeslaFactory implements CarFactory { @Override
    public Car getCar() { return new Tesla(); } } 3.工厂3
public class DaZhongFactory implements CarFactory { @Override
    public Car getCar() { return new DaZhong(); } } 

3.消费者

public class Constumer { public static void main(String[] args){ Car car = new WuLingFactory().getCar(); Car car2 = new TeslaFactory().getCar(); Car car3 = new DaZhongFactory().getCar(); car.getname(); car2.getname(); car3.getname(); } } 

工厂方法模式去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
工厂方法模式组成:
1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
2)具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
3)抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
4)具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。
工厂方法模式使用继承自抽象工厂角色的多个子类来代替简单工厂模式中的“上帝类”。正如上面所说,这样便分担了对象承受的压力;而且这样使得结构变得灵活 起来——当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成,那么就可以被客户使用,而不必去修改任何已有 的代码。可以看出工厂角色的结构也是符合开闭原则的!

最后

如何选择:
根据设计模式:建议优先工厂方法模式,
根据实际业务:大多选择简单工厂模式。

本文地址:https://blog.csdn.net/qq_34748010/article/details/107889796

相关标签: 设计模式