一.工厂方法模式
1.简单工厂模式
基本介绍
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
代码实例
准备一个pizza抽象类,抽象准备原材料的方法,有两个实现类分别是CheesePizza和GreekPizza。
pizza类准备
//抽象Pizza类,封装了抽象的准备原材料方法
public abstract class Pizza {
protected String name;
//准备原材料
public abstract void prepare();
}
------------------------------------------------------------------------------
//GreekPizza
public class GreekPizza extends Pizza{
@Override
public void prepare() {
System.out.println("给制作Greek披萨准备材料");
}
}
------------------------------------------------------------------------------
//CheesePizza
public class CheesePizza extends Pizza{
@Override
public void prepare() {
System.out.println("给制作奶酪披萨准备材料");
}
}
新建一个工厂类
public class SimpleFactory {
public Pizza getPizza(String type){
switch (type) {
case "cheese":
return new CheesePizza();
case "greek":
return new GreekPizza();
}
System.out.println("请输入正确的pizza种类");
return null;
}
}
结果演示:
class Test{
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
simpleFactory.getPizza("cheese").prepare();
simpleFactory.getPizza("greek").prepare();
simpleFactory.getPizza("fdas");
}
}
------------------------------------------------------------------------------
给制作奶酪披萨准备材料
给制作Greek披萨准备材料
请输入正确的pizza种类
2.多个工厂方法模式
基本介绍
是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象
代码实例:
新建工厂类:
public class GetFactory {
public Pizza getGreek() {
return new GreekPizza();
}
public Pizza getCheese() {
return new CheesePizza();
}
}
结果演示:
class Test{
public static void main(String[] args) {
GetFactory getFactory = new GetFactory();
getFactory.getCheese().prepare();
getFactory.getGreek().prepare();
}
}
------------------------------------------------------------------------------
给制作奶酪披萨准备材料
给制作Greek披萨准备材料
3.静态工厂方法模式
基本介绍
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
代码实例
public class GetFactory {
public static Pizza getGreek() {
return new GreekPizza();
}
public static Pizza getCheese() {
return new CheesePizza();
}
}
结果演示
class Test{
public static void main(String[] args) {
GetFactory.getGreek().prepare();
GetFactory.getGreek().prepare();
}
}
------------------------------------------------------------------------------
给制作Greek披萨准备材料
给制作Greek披萨准备材料
总结
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
二.抽象工厂模式
基本介绍
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
代码实例:
抽象工厂
public interface AbstractFactory {
public Pizza getPizza();
}
工厂类:
public class CheesePizzaFactory implements AbstractFactory {
@Override
public Pizza getPizza() {
return new CheesePizza();
}
}
------------------------------------------------------------------------------
public class GreekPizzaFactory implements AbstractFactory {
@Override
public Pizza getPizza() {
return new GreekPizza();
}
}
测试:
class Test{
public static void main(String[] args) {
new GreekPizzaFactory().getPizza().prepare();
new CheesePizzaFactory().getPizza().prepare();
}
}
------------------------------------------------------------------------------
给制作Greek披萨准备材料
给制作奶酪披萨准备材料
好处
如果有需要扩充时,只需要新建一个pizza的实现类,新建其对应的工厂类,工厂类实现抽象工厂就可以完成扩充,无需在已有的代码上进行改进。扩展性好
标签:披萨,模式,public,new,工厂,class,Pizza From: https://www.cnblogs.com/yufou/p/16742212.html