国外设计案例网站,厦门seo外包平台,只想怎样建设自己的销售网站,公司推广渠道一篇博客读懂设计模式之—工厂模式
工厂模式在我们日常开发的时候经常用到#xff0c;相信大家都有了一定的了解#xff0c;工厂模式是一种创建对象的设计模式#xff0c;它提供一种创建对象的最佳方式。
主要过程是#xff1a; 定义一个创建对象的接口#xff0c;让其子…一篇博客读懂设计模式之—工厂模式
工厂模式在我们日常开发的时候经常用到相信大家都有了一定的了解工厂模式是一种创建对象的设计模式它提供一种创建对象的最佳方式。
主要过程是 定义一个创建对象的接口让其子类自己决定实例化哪一个工厂类工厂模式使其创建过程延迟到子类进行。
工厂模式主要有常见的三种类型简单工厂模式工厂方法模式抽象工厂模式。下面我们分别用代码来介绍一下这三种模式的演化过程
简单工厂模式
添加一个接口
public interface Car {String getBrand();
}添加几个实现类实现接口
public class Bmw implements Car {Overridepublic String getBrand() {return BMW;}
}public class Benz implements Car {Overridepublic String getBrand() {return Benz;}
}public class Audi implements Car{Overridepublic String getBrand() {return Audi;}
}添加一个方法来选择创建的对象
//todo:1 简单工厂模式虽然代码很简单但是一个工厂怎么可能生产这么多不同的产品不太符合规律所以有了工厂方法模式
public class SimpleFactory {public Car getCar(String name){if(BMW.equalsIgnoreCase(name)){return new Bmw();}else if(Benz.equalsIgnoreCase(name)){return new Benz();}else if(audi.equalsIgnoreCase(name)){return new Audi();}else{return null;}}
}添加测试类
public class TestSimpleFactory {public static void main(String[] args) {SimpleFactory simpleFactory new SimpleFactory();Car car simpleFactory.getCar();System.out.println(car.getBrand());}
}工厂方法模式
添加一个工厂的接口
//todo:2 工厂方法模式通过接口来实现不过这有个不足我们消费者得自己知道用哪个工厂来进行生产
public interface Factory {Car getCar();
}实现接口的工厂类
public class AudiFactory implements Factory {Overridepublic Car getCar() {return new Audi();}
}public class BenzFactory implements Factory {Overridepublic Car getCar() {return new Benz();}
}public class BmwFactory implements Factory{Overridepublic Car getCar() {return new Bmw();}
}测试类
public class TestFuncFactory {//这种模式也有点问题工厂模式的好处是让使用者更加方便但是这种模式还要我们知道是要用哪个工厂来创建这也太不智能了吧所以就有了抽象工厂public static void main(String[] args) {System.out.println(new BenzFactory().getCar());System.out.println(new BmwFactory().getCar());System.out.println(new AudiFactory().getCar());}
}抽象工厂方法 整合了前面两种模式
添加一个抽象工厂
//todo:3. 抽象工厂方法模式利用抽象类来实现综合了工厂方法和简单工厂方法两种模式的优缺点
public abstract class AbstractFactory {abstract Car getCar();public Car getCar(String name){if(BMW.equalsIgnoreCase(name)){return new BmwFactory().getCar();}else if(Benz.equalsIgnoreCase(name)){return new BenzFactory().getCar();}else if(audi.equalsIgnoreCase(name)){return new AudiFactory().getCar();}else{return null;}}
}添加一个默认实现类
//因为抽象类不能直接实例化所以这里添加了一个默认类来实现抽象类的其他方法
public class DefaultFactory extends AbstractFactory {OverrideCar getCar() {return new BenzFactory().getCar();}
}测试类
public class TestAbstrFactory {public static void main(String[] args) {DefaultFactory defaultFactory new DefaultFactory();System.out.println(defaultFactory.getCar(bmw));}
}**
后期会继续完善 欢迎留言点赞
**